Error: Can't set headers after they are sent


NodeJS 启动,出现如下报错。

Error: Can't set headers after they are sent.
at ServerResponse.OutgoingMessage.setHeader (_http_outgoing.js:335:11)
at ServerResponse.header (/server/node/opstools/node_modules/express/lib/response.js:700:10)
at ServerResponse.send (/server/node/opstools/node_modules/express/lib/response.js:154:12)
at fn (/server/node/opstools/node_modules/express/lib/response.js:934:10)
at View.exports.renderFile [as engine] (/server/node/opstools/node_modules/ejs/lib/ejs.js:353:10)
at View.render (/server/node/opstools/node_modules/express/lib/view.js:93:8)
at EventEmitter.app.render (/server/node/opstools/node_modules/express/lib/application.js:566:10)
at ServerResponse.res.render (/server/node/opstools/node_modules/express/lib/response.js:938:7)
at /server/node/opstools/app.js:43:9
at Layer.handle_error (/server/node/opstools/node_modules/express/lib/router/layer.js:58:5)

“Can’t set headers after they are sent.” => “不能发送 headers 因为已经发送过一次了”
在处理 HTTP 请求时,服务器会先输出响应头,然后再输出主体内容。
而一旦输出过一次响应头,比如执行过 res.writeHead() 或 res.write() 或 res.end()。
你再尝试通过 res.setHeader() 或 res.writeHead() 来设置响应头时,有些方法比如 res.redirect() 会调用res.writeHead(),就会报这个错误。
Express 中的 res.header() 相当于 res.writeHead(),res.send() 相当于 res.write()。

分享:

评论