可以通过 Express 中的中间件添加 `app` 方法吗?
Possible to add an `app` method through middleware in Express?
我正在尝试编写一个中间件,它在使用 express()
创建的 app
上创建一个新方法。比如我想实现如下:
app.use(myMiddleware())
// ...
app.newMethod() // added through the previous middleware
有办法实现吗?正如其他一些问题中所提到的,我想到的一种方法是将 app
本身作为参数传递给我的中间件,以便我可以对其进行调整:
app.use(myMiddleware(app))
// ...
app.newMethod() // ok, definitely doable
然而,这似乎不够优雅。
此外,req.app
和 res.app
引用在这种情况下对我不起作用,因为 myMiddleware()
返回的 (req, res, next) => {}
函数仅在接收请求时执行,而我可能想要在调用 app.listen()
之前访问该方法。
有什么方法可以实现吗?
在中间件中加一个app
方法确实没有意义。中间件的目的是处理传入的请求,为以后的中间件或以后的请求处理程序做准备,或者只是在中间件中处理请求本身。
中间件在传入请求期间被一遍又一遍地调用。它不应该用于应该只发生一次的事情,它应该只用于与传入请求相关的处理。
while I possibly want to access the method before even app.listen() is called
因此,这绝对与传入请求无关,因此使用中间件并不是正确的设计选择。
如果您只想将自己的方法添加到 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(...)
。
我正在尝试编写一个中间件,它在使用 express()
创建的 app
上创建一个新方法。比如我想实现如下:
app.use(myMiddleware())
// ...
app.newMethod() // added through the previous middleware
有办法实现吗?正如其他一些问题中所提到的,我想到的一种方法是将 app
本身作为参数传递给我的中间件,以便我可以对其进行调整:
app.use(myMiddleware(app))
// ...
app.newMethod() // ok, definitely doable
然而,这似乎不够优雅。
此外,req.app
和 res.app
引用在这种情况下对我不起作用,因为 myMiddleware()
返回的 (req, res, next) => {}
函数仅在接收请求时执行,而我可能想要在调用 app.listen()
之前访问该方法。
有什么方法可以实现吗?
在中间件中加一个app
方法确实没有意义。中间件的目的是处理传入的请求,为以后的中间件或以后的请求处理程序做准备,或者只是在中间件中处理请求本身。
中间件在传入请求期间被一遍又一遍地调用。它不应该用于应该只发生一次的事情,它应该只用于与传入请求相关的处理。
while I possibly want to access the method before even app.listen() is called
因此,这绝对与传入请求无关,因此使用中间件并不是正确的设计选择。
如果您只想将自己的方法添加到 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(...)
。