出错代码:
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(...)
})