node.js,同时访问出错,Can't set headers after they are sent

出错代码:

  router.get('/', function (req, res, next) { 
      MongoClient.connect(url, function (err, db) { 
        if (err) { 
        console.log('connect error'); 
        throw err; 
      } 
    console.log('connect success'); 
    db.collection('live_collection').find().toArray(function(err, result) { 
      if (err) { 
        console.log('find error'); 
        db.close(); 
        throw err; 
      } 
      console.log('query success'); 
      db.close(); 
      // console.log(result); 
      return res.json({message: 'request for live success', ret: 0, match: result}); 
    }) 
  }) 
}); 

 

return res.json({message: 'request for live success', ret: 0, match: result});

这里出错,网上搜的说法和这个情况都不一样,不存在 callback 被调用两次的情况。但是从抓包看,出错的时候服务会发送一个 404,不知道为什么会有这样错误,折腾很久了也没找出原因。

 

后来发现,是因为 return 写在了回调里边,这个请求最后没有返回任何东西,然后将db改成在node启动时链接,设置global.db = db.

更改后:

    router.get('/', async (req, res) => { 
      try { 
         await db.collection('live_collection') .find().toArray() 
      } 
      catch (e) { 

      } 
      res.json(...) 
    })

转载于:https://www.cnblogs.com/sunpengfei/articles/8552861.html

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值