返回快速路由器中间件

时间:2018-01-06 20:39:23

标签: javascript node.js express return

如果我有一个简单的快速路由器只返回任何内容(未定义),有没有办法从它恢复或请求只是挂起,直到超时?

例如,如果我有这段代码:

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()

提前致谢!

2 个答案:

答案 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')
})