【问题标题】:pass additional parameters to routes (expressjs)将附加参数传递给路由(expressjs)
【发布时间】:2012-07-18 10:47:28
【问题描述】:

最近开始使用 express,我偶然发现了以下问题:

我的路由的整个逻辑都定义在单独的文件中,然后通过 require(route_name) 包含这些文件。各自的get / post匹配如下:

app.get('/', routes.home) etc.

上面这行暗示 routes.home 是一个使用参数 req、res 和 next 调用的函数。

我有一堆实用程序函数存储在 utils 对象中,我希望每个路由都能够访问它们。到现在为止,我一直在解决这个问题:

var utils = ...

app.get('/', function (req, res, next) {
  routes.home(req, res, next, utils);
});

有没有办法告诉 express 它应该将 utils 对象作为参数传递给每条路由,或者通常是我的问题的更好解决方案?

【问题讨论】:

  • 标准的方法是让你的路由文件做他们自己的要求来拉入 utils。你不这样做有什么原因吗?

标签: javascript node.js parameters express


【解决方案1】:

我同意 JohnnyHK 的观点。还有为什么你需要通过 res 和 req 两次?为什么不在您的应用文件中执行此操作:

app.get('/', routes.home);

然后在你需要的文件中是这样的:

var utils = require('utils')
exports.home = function(req, res){
    //code
}

【讨论】:

  • 我之所以选择这种方式是因为 utils 包含某些模块(例如存储),其中只有一个实例可用。如果不是这样,我会坚持你上面描述的程序。
  • 节点文档:模块在第一次加载后被缓存。这意味着(除其他外)每次调用 require('foo') 都将返回完全相同的对象,如果它会解析为同一个文件。
  • 还有:如果你想让一个模块多次执行代码,那么导出一个函数,然后调用那个函数。
【解决方案2】:

感谢您的所有回答。我通过在我想要到 utils 模块的路由上调用“init(utils)”函数找到了解决问题的方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-10-17
    • 1970-01-01
    • 2023-03-20
    • 2023-04-06
    • 2011-12-21
    • 2013-01-09
    • 1970-01-01
    • 2019-03-03
    相关资源
    最近更新 更多