Как передать или получить доступ к значениям между модулями 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')();

Таким образом, вы можете использовать свой модуль аутентификации в качестве основы, и каждое приложение "расширяет" его, и вы можете повторно использовать свой код авторизации.

Также ваш пользовательский модуль не имеет прямых зависимостей. надеюсь, это поможет.

Другие вопросы по тегам