【问题标题】:How to pass or access values between Node.js modules如何在 Node.js 模块之间传递或访问值
【发布时间】:2014-05-18 03:35:54
【问题描述】:

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

感谢您的帮助。

【问题讨论】:

  • 你不应该这样做。您应该将它们插入到您的数据库中。
  • 感谢您的评论法里德。我想避免进行数据库调用,因为我的所有请求都需要此身份验证。我的应用程序将处理很多小请求。即使我由于系统故障(应该很少见)而丢失了活动令牌,也只意味着用户必须再次登录。

标签: node.js module communication


【解决方案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')();

这样,您可以使用您的身份验证模块作为基础,并且每个应用程序都“扩展”它,您可以重复使用您的身份验证代码。

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

【讨论】:

  • 谢谢马库兹。这听起来像我需要的。我会试一试,看看能不能成功。
猜你喜欢
  • 1970-01-01
  • 2022-01-20
  • 2020-05-17
  • 1970-01-01
  • 1970-01-01
  • 2020-03-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多