今天在开发的时候,Node服务器端报了这个错误,根据他的提示不难发现,我在响应之后又去执行了设置响应头部的操作,导致了这一错误,下面我把代码发一下,给大家做个参考:
user.save((err,rst) => {
if (err) {
console.log("Error:" + err);
ctx.response.type = 'json';
ctx.response.body = { error: err };
}
else {
console.log("Res:" + rst);
ctx.response.type = 'json';
ctx.response.body = { success: 'regist success!' };
}
})
这里呢,是执行了一个Post注册的操作,使用的mongoose连接mongodb 进行用户存储,就在这里操作,看似我并没有提前设置headers,但是他实际上在执行save完成之前就已经执行了回调函数中的内容了,导致报错。这里多说一句,其实如果你不返回一个response,他会默认返回一个404 Not Found,故你再次设置response他就会给你报这个错误。解决办法这里我使用了es6的新特性 async … await。
var obj = await user.save();
if (obj.err) {
ctx.response.type = 'json';
ctx.response.body = { error: err };
} else {
ctx.response.type = 'json';
ctx.response.body = { success: 'regist success!' };
}
这一操作可以保证执行完成save操作,然后获取到save之后返回的信息,再进行返回执行结果,他也不回给你返回not found了,从而不会报错 set headers after they are sent to client.
更多示例可以参考:koa not found
本文探讨了在Node.js中常见的错误“setHeadersAfterTheyAreSentToClient”,该错误通常发生在尝试在响应已被发送后修改HTTP响应头时。文章通过一个具体的mongoose操作示例,解释了错误产生的原因,并提供了一种解决方案,即使用ES6的async/await特性来确保在响应被发送前完成所有操作。
2606

被折叠的 条评论
为什么被折叠?



