Node.js+Restify中res.send()报错:Cannot set headers after they are sent
问题原因与修复方案
错误原因
你遇到的ERR_HTTP_HEADERS_SENT错误,根源在else分支的逻辑漏洞:
当data2存在时,代码执行res.send(200, data2)已经给客户端返回了响应,但函数并没有停止执行,会继续往下走到res.send(400, 'Error'),这时候试图再次发送响应,就会触发“不能在响应发送后再设置HTTP头”的错误。
修复方法
在发送200响应后,通过return终止函数执行,或者用Restify的next()方法结束当前中间件逻辑,避免后续代码重复发送响应。
修复后的代码示例(用return终止函数):
const implementation = async (req, res, next) => { try { if (req.rut) { const data = await someAPI(); return res.send(200, data); } else { const data2 = await SomeAPI2(); if (data2) { return res.send(200, data2); } return res.send(400, 'Error'); } } catch (error) { return res.send(400, error); } };
或者用Restify标准的next()方法结束中间件:
const implementation = async (req, res, next) => { try { if (req.rut) { const data = await someAPI(); res.send(200, data); return next(); } else { const data2 = await SomeAPI2(); if (data2) { res.send(200, data2); return next(); } res.send(400, 'Error'); return next(); } } catch (error) { res.send(400, error); return next(); } };
内容的提问来源于stack exchange,提问作者pmiranda
相关产品推荐
相关产品推荐

