• 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(...)
        })

  • 相关阅读:
    【poj 1087 a plug for UNIX】
    收集 数据库的awr数据,生成报告
    power desinger 学习笔记三<批量执行sql语句>
    power desinger 学习笔记<二>
    power desinger 学习笔记<一>
    oracle中不曾熟悉的 to_char、to_number(未完待续)
    oracle 报错 :ORA-04052、 ORA-00604、 ORA-03106、 ORA-02063
    谈谈oracle中的临时表
    Oracle-在线重定义操作文档
    分享最近和同事处理的 解析XML的相关问题
  • 原文地址:https://www.cnblogs.com/sunpengfei/p/8552883.html
Copyright © 2020-2023  润新知