Cómo exportar una variable que está en una clase en Nodejs
Este es mi archivo loginHandler.js
class LoginHandler {
merchantId = '';
returnURLForIframe(req, res) {
merchantId = req.params.merchantId;
}
}
module.exports = new LoginHandler();
Quiero acceder a la variable merchantIden otro archivo
const loginHandler = require('./loginHandler')
class ResponseHandler {
getResponseFromCOMM(options,token, res){
console.log(loginHandler.merchantId)
}
}
Pero MerchantId no está definido. ¿Puedes decirme qué estoy haciendo mal?
Aquí puedes ver el código en Glitch = https://glitch.com/edit/#!/turquoise-spiky-chrysanthemum
Respuestas
Mi loginhanderler.js
class LoginHandler {
merchantId = '';
returnURLForIframe(req, res) {
this.merchantId = req.params.merchantId;
}
}
module.exports = new LoginHandler();
Mi index.js
let loginHandler = require('./loginhandler');
let req = {
params: {
merchantId: 'a test',
},
};
loginHandler.returnURLForIframe(req);
console.log(loginHandler.merchantId);
Lo resolví agregándolo a una variable de entorno en loginHandler.js
process.env.MERCHANT_ID = req.params.merchantId
y luego en responseHandler.js, accedí a esa variable
merchantId : process.env.MERCHANT_ID
Puede definirlo como una clave de objeto
class LoginHandler {
constructor() {
this.merchantId = '';
}
returnURLForIframe(req, res) {
this.merchantId = req.params.merchantId;
}
}
nuevo LoginHandler
class LoginHandler {
merchantId = "";
returnURLForIframe(req, res) {
this.merchantId = req.params.merchantId;
}
}
module.exports = new LoginHandler();
PARA FUTURA REFERENCIA (también para mí)
Fue confuso detectar cuál era el error, por lo que para mí fue útil cambiar el nombre de la variable:
class LoginHandler {
other= "";
returnURLForIframe(req, res) {
other = req.params.merchantId;
}
}
module.exports = new LoginHandler();
Entonces vi que estaba el error ReferenceError: other is not definedy pude solucionarlo.
Además, además del registro, era necesario llamar returnURLForIframepara ver el error.
const loginHandler = require("./loginHandler");
class ResponseHandler {
getResponseFromCOMM(options, token, res) {
loginHandler.returnURLForIframe({ params: { merchantId: "lalala" } });
console.log(loginHandler);
}
}
let rh = new ResponseHandler();
rh.getResponseFromCOMM("foo", "bar", "baz");