我熟悉Express,但对Restify很新。 Restify的文档有很多例子在next()
之后调用res.send()
,如下所示:
server.get('/echo/:name', function (req, res, next) {
res.send(req.params);
return next();
});
这似乎是一些Restify专家推荐的模式:
The consequences of not calling next() in restify
这样做的真实用例是什么?在你调用res.send()
之后,链中的下一个处理程序可以做什么吗?
答案 0 :(得分:1)
在我做了更多的研究后,我想我找到了答案。
只有在next()
之后调用res.send()
的实际用例是您希望安装'后呈现'类型的中间件以在路由人员完成工作后捕获所有交易。
在其他情况下,它只会为每个请求添加不必要的开销,因为它会扫描其余路由以查找下一个匹配。
大多数中间件都是“预渲染”类型,无论如何都不需要next()
调用。即使对于后期渲染类型的中间件,依赖于next()
的自愿调用也是非常危险的。您更愿意使用更加防错的方法,例如https://github.com/jshttp/on-finished。
在next()
之后调用res.send()
是一种不好的做法,在大多数情况下会造成不必要的开销。它应该只在绝对需要时才使用,你知道自己在做什么。