node.js - 防止 express 中间件为相同的父路径执行
问题描述
这是我的代码。我正在点击 put API,它正在执行中间件 3 次,但它应该只为 put 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()
; 这将导致相同的行为。
推荐阅读
- python - 将嵌套的 defaultdict 写入 csv
- email - 通过 apache common java api 转发带有附件的电子邮件(使用 JavaMailApi 读取)
- python - 具有来自多列数据框的值计数的单列
- javascript - 转到另一个页面时如何保持数据表状态?
- reactjs - 从移动设备查看时隐藏 Nav.Link 元素。(反应引导,打字稿)
- python - 每个单元python的Elasticsearch聚合
- c - 从堆栈声明开始时我们如何使用堆?
- sql - 使用JOIN时如何仅在特定范围内选择?
- wpf - WPF:双向绑定不会更新回来
- python - Python 官方 Stripe 客户端创建两个客户