是否可以通过Express中的中间件添加“app”方法?

是否可以通过Express中的中间件添加“app”方法?,express,middleware,Express,Middleware,我正在尝试编写一个中间件,在用express创建的应用程序上创建一个新方法。例如,我希望实现以下目标: app.use(myMiddleware()) // ... app.newMethod() // added through the previous middleware 有没有办法做到这一点?正如在其他一些问题中提到的,我想到的一种方法是将应用程序本身作为参数传递给我的中间件,以便我可以调整它: app.use(myMiddleware(app)) // ... app.newMeth

我正在尝试编写一个中间件,在用express创建的应用程序上创建一个新方法。例如,我希望实现以下目标:

app.use(myMiddleware())
// ...
app.newMethod() // added through the previous middleware
有没有办法做到这一点?正如在其他一些问题中提到的,我想到的一种方法是将应用程序本身作为参数传递给我的中间件,以便我可以调整它:

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


有什么方法可以做到这一点吗?

在中间件中添加应用程序方法真的没有意义。中间件的目的是处理传入的请求,为以后的中间件或请求处理程序做准备,或者只是在中间件中处理请求本身

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

而我可能想在调用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