Al llamar a una función en el módulo de esta manera
app.get("/api/sessions/oauth/google", (req, res) => { return google_callback.googleOAuthHandler(req, res); });
this
apunta al módulo y se puede acceder a otra función en el módulo usando this
googleOAuthHandler : async function (req, res) { const code = req.query.code.toString(); const {id_token, access_token} = await this.getGoogleOAuthToken(code); }
Sin embargo, pasar la función como parámetro cambia this
a global y this.getGoogleOAuthToken
se vuelve indefinido, es decir, al hacer
app.get("/api/sessions/oauth/google", google_callback.googleOAuthHandler);
¿Cómo accedo a getGoogleOAuthToken
en googleOAuthHandler
en el módulo google_callback
cuando lo uso de esta manera?
app.get("/api/sessions/oauth/google", google_callback.googleOAuthHandler);
Al pasar la función de esta manera, this
no significa el module
. Entonces this.getGoogleOAuthToken
no funciona.
sin embargo, podemos usar module.exports.getGoogleOAuthToken
para acceder a la función dentro del mismo módulo. Usar module.exports.getGoogleOAuthToken
también funciona en el primer ejemplo.
Alternativamente, si no le gusta que module.exports
llame a la función, puede colocar la línea const _this = this;
en la parte superior del archivo o const _this = module.exports = { ... }
y use _this.function
para llamar a una función dentro del módulo.
También noté que en el primer ejemplo this.function
solo funciona porque estoy usando esta sintaxis.
module.exports = { func1 : function(){}, func2 : function(){} }
al exportar con
module.exports.func1 = function(){} module.exports.func2 = function(){}
this
no se puede utilizar para acceder a la otra función