将app = express()传递给另一个模块是否与请求该模块相同?

is passing app = express() into another module the same as requiring the module?

本文关键字:模块 是否 请求 另一个 express app      更新时间:2023-09-26

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

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

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

then in somemodule;

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

如果你需要在另一个模块中再次使用express,那么你是否能够使用核心文件中设置的app.locals变量呢?

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

如果没有,你必须在这个模块中重新定义app.locals吗?

首先,我假设您正在使用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)之前在应用程序上设置的任何内容,确实可以在模块内部访问。作为模块的作者,您需要特别确定消费者传递的是您所期望的内容!