¿Cómo se llama a una función desde otra función en una module.exportsdeclaración?
var bla = require('./bla.js');
console.log(bla.bar());
bla.js
module.exports = {
foo: function (req, res, next) {
return ('foo');
},
bar: function(req, res, next) {
this.foo();
}
}
Estoy tratando de acceder a la función foodesde dentro de la función bary obtengo:
TypeError: Object # no tiene el método 'foo'
Si cambio this.foo()a solo foo()obtengo:
ReferenceError: foo no está definido

v8.12.0y ya no arroja el error.barno tiene declaración de devolución, por lo que la ejecuciónconsole.log(bla.bar())simplemente regresaundefinedRespuestas:
Cambiar
this.foo()amodule.exports.foo()fuente
exports.foo()parece un poco incómodo y difícil de leer.module.exports.foo()yexports.foo()no funciona para mí con Node.js v5.8.0.Puede declarar sus funciones fuera del
module.exportsbloque.Luego:
fuente
module.exports = { foo, bar, }También puede hacer esto para hacerlo más conciso y legible. Esto es lo que he visto hacer en varios de los módulos de código abierto bien escritos:
fuente
También puede guardar una referencia al alcance global del módulo fuera de la definición (module.) Exports.somemodule:
fuente
thisdirectamente, no es necesario declarar_thisthisque ya no es la correctathis. (Promesas y devoluciones de llamada)Otra opción, y más cercana al estilo original del OP, es colocar el objeto que desea exportar en una variable y hacer referencia a esa variable para realizar llamadas a otros métodos en el objeto. Luego puede exportar esa variable y listo.
fuente
fuente
Service.foo(), y su código de cliente también llamaráService.foo()con el mismo nombre.A partir de la versión 13 de Node.js , puede aprovechar los módulos ES6 .
Siguiendo el enfoque de clase:
Esto creará una instancia de la clase solo una vez, debido al almacenamiento en caché del módulo de Node:
https://nodejs.org/api/modules.html#modules_caching
fuente
fooera estática que le llama desde el interior debarla siguiente manera:MyClass.foo().Para solucionar su problema, he realizado algunos cambios en bla.js y está funcionando,
y ninguna modificación en app.js
fuente