将一个值传递给Node.js模块以用于Express路由

5
我希望将Express的环境传递给Express的路由模块。我想要根据Express运行在开发模式还是生产模式来进行选择。为了达到这个目的,我猜想需要以某种方式将app.settings.env传递给路由模块。
我的路由模块为每个路由导出一个函数。所以:
app.get('/search', web.search);

根据之前的stackoverflow帖子,我尝试了以下方法:

var web = require('./web')({'mode': app.settings.env});

但是Node会抛出类型错误(对象不是函数)。

我对Node和Express很陌生。我可以向一个Express路由传递值吗?如果可以,应该如何操作?

1个回答

8
如果您的web.js看起来像这样:

module.exports.search = function(req, res, next) {
    // ...
};

module.exports.somethingOther  = function(req, res, next) {
    // ...
};

然后通过调用
var web = require('./web')({'mode': app.settings.env});

您试图将对象(module.exports)用作函数。这里出现了类型错误。

您需要将module.exports转换为函数,以便向其传递参数。像这样:

module.exports = function (env) {
    return {
        // env available here
        search: function(req, res, next) {
            // ...
        },

        somethingOther: function(req, res, next) {
            // ...
        };
    };
};

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接