Node报错: can't not set headers after they are sent to the client

今天在开发的时候,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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值