如果我有一个简单的快速路由器只返回任何内容(未定义),有没有办法从它恢复或请求只是挂起,直到超时?
例如,如果我有这段代码:
const express = require('express');
const app = express();
const router = express.Router();
router.use((req, res, next) => {
console.log('stuck');
return;
});
app.use(router);
app.get('/', (req, res) => res.send('Hello World!'));
app.listen(3000, () => console.log('Example app listening on port 3000!'));
应用在打印stuck
后挂起。如果我返回next()
请求仍在继续,但我正在尝试查看是否有办法从空的return语句中恢复而不在某个时刻调用next()
。
提前致谢!
答案 0 :(得分:1)
由于您不想调用next()
,您可以包装处理程序。
这样的事情:
const withReturnNext = (func) => (req, res, next) => {
func(req, res);
next();
}
app.use(withReturnNext((req, res) => res.set('x-headername', 'value'));
但是,这是不可取的,因为任何异步代码都会在异步操作完成之前返回,导致next()
在它应该被调用之前被调用。
答案 1 :(得分:0)
您必须使用next()
来继续中间件链。如果您从函数返回,您只需终止链,如果后续函数负责响应,您将无法获得它。如果你想终止(例如因为出错了)但仍然完成了请求,你可以使用类似的东西:
app.use(function (err, req, res, next) {
console.error(err.stack)
res.status(500).send('Something went wrong')
})