当我在/routes/index.js
中的router.get()中放置一个MongoDB查询时,这样:
/* GET home page. */
router.get('/', function(req, res, next) {
console.log('1 rendering index performing a DB query');
performQuery(query, function(dbData) {
res.render('./home/index', dbData);
});
});
我得到了这个控制台输出:
[nodemon] starting `node ./bin/www`
app.use(/, routes)
SERVER READY on port 3000
SOCKET.IO client: /#V261JQOrV3aEyu34AAAA CONN
rendering index performing a DB query -------------------------------------------------> 1
GET / 200 744.652 ms - 4054 -----------------------------------------------------------> 1
SOCKET.IO client: /#V261JQOrV3aEyu34AAAA DISCONN
GET /stylesheets/main.css 304 4.166 ms - -
GET /images/logo-icon-90.png 304 0.514 ms - -
GET /public/js/libs/socket.io/socket.io.js 304 3.888 ms - -
GET /public/js/libs/jquery/jquery-2.1.4.min.js 304 15.758 ms - -
rendering index performing a DB query -------------------------------------------------> 2
GET / 304 363.686 ms - - --------------------------------------------------------------> 2
SOCKET.IO client: /#w4kVulgNfEfnJJPOAAAB CONN
我检查了是否有某种类型的错误取出MongoDB查询并只是渲染'/'然后控制台只输出一个GET请求到'/'。获得1或2个GET请求之间唯一的变化就是放置MongoDB查询。
performQuery.js
内容:
MongoClient.connect(mongoURL + dbName, function(err, db) {
assert.equal(err, null);
const cursor = db.collection(collection).aggregate([
{ $match: query.justVars},
{ $group: {
_id: {var1: '$somevar', var2: '$anothervar'},
takeScore: {$first: '$score'}
}
},
{ $sort: {score: -1}},
{ $group: {
_id: '$_id.var1',
vars2: { $push: {
name: '$_id.var2',
score: '$takeScore'
}
},
sumScore: { $sum: '$score'}
}
},
{ $sort: {sumScore: -1}}
]);
cursor.toArray(function(error, documents) {
assert.equal(error, null);
callback(documents);
db.close();
});
});
问题
为什么有2个GET请求到'/'而不只是一个?
答案 0 :(得分:0)
可能的问题是cursor.toArray
。你可以console.log
在这里:
cursor.toArray(function(error, documents) {
assert.equal(error, null);
console.log(documents);
callback(documents);
db.close();
});
并检查控制台中有多少额外的行?
您似乎从数据库中检索了2个文档,在此迭代中,您调用了2次回调。当迭代完成时,你必须调用回调 ONLY 。
什么是SOCKET.IO日志?您是否有可能在浏览器上打开2个不同的选项卡,当您重新启动应用程序时,他们会尝试自动连接,这就是为什么您感觉有2个GET请求?