res
Express中的对象是Node.js的http.ServerResponse
子类(请阅读http.js源代码)。允许您拨打任意数量的电话res.setHeader(name, value)
,直到致电为止res.writeHead(statusCode)
。之后writeHead
,将标题放进去,您只能调用res.write(data)
,最后res.end(data)
。
错误“错误:发送标头后无法设置标头”。表示您已经处于“正文”或“完成”状态,但是某些函数试图设置标头或statusCode。当您看到此错误时,请尝试查找在某些正文已被写入之后尝试发送标头的任何内容。例如,查找意外调用两次的回调,或发送正文后发生的任何错误。
在您的情况下,您致电res.redirect()
,这导致响应变为“完成”。然后,您的代码引发了错误(res.req
isnull
)。并且由于该错误发生在您的实际错误function(req, res, next)
(而不是回调)之内,因此Connect能够捕获该错误,然后尝试发送500错误页面。但是,由于已经发送了标头,所以Node.jssetHeader
抛出了您看到的错误。