可以在Express中通过中间件添加`app`方法吗?

时间:2018-03-18 20:19:16

标签: express middleware

我正在尝试编写一个中间件,在使用app创建的express()上创建一个新方法。例如,我想实现以下目标:

app.use(myMiddleware())
// ...
app.newMethod() // added through the previous middleware

有没有办法实现这个目标?我在其他一些问题中提到的一种方法是将app本身作为参数传递给我的中间件,以便我可以调整它:

app.use(myMiddleware(app))
// ...
app.newMethod() // ok, definitely doable

然而,这似乎不够优雅。
此外,req.appres.app引用在这种情况下对我不起作用,因为(req, res, next) => {}返回的myMiddleware()函数仅在接收请求时执行,而我可能希望在调用app.listen()之前访问该方法。

有没有办法实现这个目标?

1 个答案:

答案 0 :(得分:1)

在中间件中添加app方法确实没有意义。中间件的目的是处理传入的请求,或者为后续的中间件或后来的请求处理程序做准备,或者只是在中间件中处理请求本身。

在传入请求期间反复调用中间件。它永远不应该用于应该只发生一次的事情,它应该只用于与传入请求相关的处理。

  

虽然我甚至想要在调用app.listen()之前访问该方法

所以,这绝对与传入的请求无关,因此使用中间件不是正确的设计选择。

如果您要做的只是将自己的方法添加到app对象,则可以在初始化服务器时执行此操作:

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

// add my own method to the app object
app.myMethod = function(myArg1, myArg2)  {
    // put the implementation here
}

app.use(...);
app.get(...);
app.get(...);

app.listen(...);

然后,您可以随时拨打app.myMethod(...)