将app = express()传递给另一个模块,与需要模块相同?

时间:2015-05-22 16:10:25

标签: javascript node.js express module

我想知道将app = express()传递到另一个模块与在该模块中要求表达之间的区别是什么。

如果我像这样传递app = express():

var app = require('express');
app.locals.title = title;
require('somemodule')(app);

然后在somemodule中;

exports = function(app) {
    console.log(app.locals.title);
}

如果您要在另一个模块中再次使用express,那么您是否可以使用核心文件中设置的app.locals变量。

var app = require(express);
console.log(app.locals.title);

如果没有,您是否需要在此模块中重新定义app.locals?

哪种方法最好使用。

1 个答案:

答案 0 :(得分:0)

首先,我假设你正在使用Express 4x。在4x中,模块实际上导出了一个函数,因此在需要模块之后,您需要首先创建应用程序。像这样:

var express = require('express');
var app = express();

如果模块执行类似添加中间件或向 项目中创建的app添加功能的内容,那么只有在您首次创建时才能使用该模块应用程序,然后将其传递给模块。见下文:

var express = require('express);
var app = express();
require('middleware-adder')(app);
// app now has the middeware provided by my module.

在将应用程序传递到您需要的模块之前设置的任何内容(例如您的示例中为app.locals.title)确实可以在模块内部访问。作为一个模块的作者,你需要更加确定消费者正在通过你期望的那样!

希望这有帮助。