node.js - sistema - Pasar argumentos para requerir(al cargar el módulo)
npm (4)
En función de sus comentarios en esta respuesta , hago lo que intenta hacer de esta manera:
module.exports = function (app, db) {
var module = {};
module.auth = function (req, res) {
// This will be available ''outside''.
// Authy stuff that can be used outside...
};
// Other stuff...
module.pickle = function(cucumber, herbs, vinegar) {
// This will be available ''outside''.
// Pickling stuff...
};
function jarThemPickles(pickle, jar) {
// This will be NOT available ''outside''.
// Pickling stuff...
return pickleJar;
};
return module;
};
Yo estructura casi todos mis módulos así. Parece que funciona bien para mí.
¿Es posible pasar argumentos al cargar un módulo usando require?
Tengo un módulo, login.js que proporciona funcionalidad de inicio de sesión. Requiere una conexión de base de datos, y quiero que se use la misma conexión de base de datos en todos mis módulos. Ahora exporto una función login.setDatabase (...) que me permite especificar una conexión a la base de datos, y eso funciona bien. Pero preferiría pasar la base de datos y cualquier otro requisito cuando cargue el módulo.
var db = ...
var login = require("./login.js")(db);
Soy bastante nuevo con NodeJS y generalmente desarrollo usando Java y Spring Framework, así que sí ... esto es una inyección de constructor :) ¿Es posible hacer algo como el código que proporcioné arriba?
No estoy seguro de si esto aún será útil para las personas, pero con ES6 tengo una manera de hacerlo que me parece limpia y útil.
class MyClass {
constructor ( arg1, arg2, arg3 )
myFunction1 () {...}
myFunction2 () {...}
myFunction3 () {...}
}
module.exports = ( arg1, arg2, arg3 ) => { return new MyClass( arg1,arg2,arg3 ) }
Y luego obtienes tu comportamiento esperado.
var MyClass = require(''/MyClass.js'')( arg1, arg2, arg3 )
Otra forma de hacer las cosas es definir primero los métodos y luego hacerlos disponibles a continuación a través de ''exports''. (Module.exports y exports se refieren al mismo objeto)
function kamehameha(name,fame){
}
function bigbangkamehameha(name){
}
exports.kamehameha=kamehameha;
exports.bigbang=bigbangkamehameha; //bigbang refers to bigbangkamehameha
Sí. En su módulo de login
, simplemente exporte una única función que tome el db
como argumento. Por ejemplo:
module.exports = function(db) {
...
};