防止快速中间件针对同一父路径执行



这是我的代码。 我正在点击放置 API,它正在执行中间件 3 次,但它应该只针对放置 API 执行。

app.use('/api/user', MiddlewareFun);
app.get('/api/user', (req, res) => {
//do something
});
app.use('/api/user', MiddlewareFun);
app.post('/api/user', (req, res) => {
//do something
});
app.use('/api/user', MiddlewareFun);
app.put('/api/user', (req, res) => {
//do something
});

请不要这样说使用。

app.put('/api/user', MiddlewareFun, (req, res) => {
//do something
});

嗯,它正在发生,因为你已经做到了。如果希望中间件仅以选定的方法执行,则必须指定它。例如:

而不是做:

app.use('/api/user', MiddlewareFun)
app.put('/api/user', (req, res) => {
//do something
})

use方法替换为put。正如绑定常规路由一样:

app.put('/api/user', MiddlewareFun)
app.put('/api/user', (req, res) => {
//do something
})

另外,还有一件事。您不必在每个路由声明之前重复中间件调用。如果要将中间件应用于整个路由器,可以使用.use()(就像您所做的那样(或.all();这将导致相同的行为。

Express 中的中间件绑定到应用程序或路由器。 yuur 问题的解决方案是在中间件检查请求对象的方法

let MiddlewareFun = function (req, res, next) {
if (req.method === 'PUT') {
// do something
}
next()
}
app.use('/api/user', MiddlewareFun);

答案是,你需要编写快速中间件,它是你的应用程序或路由器的一部分。您可以编写任意数量的中间件,但在您的情况下,您只需要一次,这是它的实现。

const MiddlewareFun = function(req, res, next) {
// req is object which consist of information about request made.
// From req object you can get method name which is called.
if(req.method.toLowerString() === 'put') {
// your logic goes here
}
next();
}
app.use('/api/user', MiddlewareFun);
app.get('/api/user', (req, res) => {
//do something
});
app.post('/api/user', (req, res) => {
//do something
});

app.put('/api/user', (req, res) => {
//do something
});

最新更新