Как передать или получить доступ к значениям между модулями Node.js
Я пишу небольшое приложение Node, которое требует аутентификации.
У меня есть Node Express app.js, и он включает в себя auth.js и user.js, например:
var mongo = require('mongoskin');
var db = mongo.db("mongodb://localhost:27017/ntp01", {native_parser:true});
var auth = require('./lib/auth');
var routes = require('./routes/index'); // Loads index.js module
var users = require('./routes/user'); // Loads user.js module
var tpapp = require('./routes/tpapp'); // Loads TP-app
var app = express();
// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');
app.use(favicon());
app.use(logger('dev'));
app.use(bodyParser.json());
auth.js содержит простой массив, содержащий токен, который я генерирую для каждого пользователя при входе в систему, время последнего доступа и IP-адрес клиента.
Моя проблема - клиентский IP, который я получаю в модуле user.js. Как я могу получить доступ и вставить IP в модуль авторизации?
Спасибо за вашу помощь.
1 ответ
Есть много способов решить эту проблему.
Я могу подумать, что самый простой способ - использовать ваш модуль авторизации вместе с модулем пользователей.
Но в наше время все крутые парнишки используют инъекцию зависимости. Если вы хотите пойти по этому пути, возможно, ваш пользовательский модуль сможет экспортировать фабрику.
Итак, вместо:
module.exports = function users () {/* stuff *}
Вы могли бы иметь это:
var defaultAuth = function defaultAuth() {}
module.exports = function userFactory (auth) {
auth = auth || defaultAuth
return function users () { /* stuff * }
}
и в вашем приложении вам требуется пользователь:
// maybe add app specific stuff to you auth module.
var users = require('./routes/user')(auth);
// or if you want to use the user default auth
var users = require('./routes/user')();
Таким образом, вы можете использовать свой модуль аутентификации в качестве основы, и каждое приложение "расширяет" его, и вы можете повторно использовать свой код авторизации.
Также ваш пользовательский модуль не имеет прямых зависимостей. надеюсь, это поможет.