2016-09-21 20:49:14

Node.js: 慎用express的res.status()和原生res.statusCode

res.status

express为res.writeHead添加了一个链式调用的包装方法statusvia

res.writeHead

原生方法的描述在这里

根据文档的描述, 在res.end与res.write方法之后调用res.writeHead,会直接报错, 结果也一致:

因此, 最好在所有中间件最上方首先用res.writeHead()设定好状态码, 避免疏忽导致出错

This is the question

express.js的文档中经常出现res.status(200).end(), 但是自己写的时候,千万不要用链式调用来结束请求,因为res.status竟然只是原生res.statusCode的一个包装, 还TM把错误提示给取消了

更加坑爹的在于, 如果再res.write之后使用res.status(207).end()来结束, 那么控制台是这样的:

嗯, 看起来没问题,是207啊, 但是!!!! 抓包出来是这样的:

居然竟然是200, express你丫真是心机boy啊, 不仅把报错给跳掉了,明明没有改状态码还伪装成改了

两天的生命就这样没有了...

源码

查询express的源码, 发现这丫直接调用this.statusCode = code;

原来直接设置statusCode不会在错误的情况下报错, 还能伪装成改了状态码, 我...........

本文链接:https://smallpath.me/post/express-req-status

-- EOF --