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