如何在Node.js模块之间传递或访问值

时间:2014-05-17 16:30:17

标签: node.js module communication

我正在编写一个需要身份验证的小型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。

我的问题是我在user.js模块中获得的客户端IP。如何在auth模块中访问和插入IP?

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

有很多方法可以解决这个问题。

我能想到的最简洁的方法是将auth模块与用户模块一起使用。

但是现在所有酷孩子都在使用依赖注入。 如果你想走这条路,也许你的用户模块可以出口工厂。

所以,而不是:

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')();

通过这种方式,您可以将auth模块用作基础,并且每个应用程序都可以扩展"它,你可以重新使用auth代码。

此外,您的用户模块没有直接依赖关系。 希望有所帮助。