栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

错误:将标头发送到客户端后无法设置标头

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

错误:将标头发送到客户端后无法设置标头

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
is
null
)。并且由于错误发生在您的实际错误之内
function(req, res,next)
(而不是在回调之内),因此Connect能够捕获该错误,然后尝试发送500错误页面。但是,由于已经发送了标头,所以Node.js
setHeader
抛出了您看到的错误。

Node.js / Express响应方法的完整列表以及何时调用它们:

回复必须在 标题中, 并保持在 标题中

  1. res.writeContinue()
  2. res.statusCode = 404
  3. res.setHeader(name, value)
  4. res.getHeader(name)
  5. res.removeHeader(name)
  6. res.header(key[, val])
    (仅限快递)
  7. res.charset = 'utf-8'
    (仅Express;仅影响Express特定的方法)
  8. res.contentType(type)
    (仅限快递)

响应必须在 头脑中, 然后变成 身体

  1. res.writeHead(statusCode, [reasonPhrase], [headers])

响应可以是 头部/身体 ,也可以是 身体

  1. res.write(chunk, encoding='utf8')

响应可以是 Head / Body ,也可以是 Finished

  1. res.end([data], [encoding])

响应可以处于 Head / Body ,也可以保持其当前状态:

  1. res.addTrailers(headers)

响应必须在 标题中, 并已 完成

  1. return next([err])
    (仅连接/快速)
  2. 中间件中的任何异常
    function(req, res, next)
    (仅适用于Connect / Express)
  3. res.send(body|status[, headers|status[, status]])
    (仅限快递)
  4. res.attachment(filename)
    (仅限快递)
  5. res.sendfile(path[, options[, callback]])
    (仅限快递)
  6. res.json(obj[, headers|status[, status]])
    (仅限快递)
  7. res.redirect(url[, status])
    (仅限快递)
  8. res.cookie(name, val[, options])
    (仅限快递)
  9. res.clearcookie(name[, options])
    (仅限快递)
  10. res.render(view[, options[, fn]])
    (仅限快递)
  11. res.partial(view[, options])
    (仅限快递)


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/401537.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号