我有一个node.js应用程序,它使用我创建的mongodb数据库。在它中,我有一个简单的集合,名为注释,当我调用db.comments.find({})时,它的内容是{“作者”:"me",“注释”:“这是注释”}。
然而,当我试图访问这个收藏,以显示在我的玉视图,它超时后,难以置信的时间。错误对象的Console.log显示它要么是MongoError,要么是应用程序破坏了连接。我的问题是为什么会发生这种事?循环和连接参数似乎没有错误。下面是我必须连接的东西,存储在app.js中
var app = express();
var mongodb = require('mongodb'),
serverdb = new mongodb.Server('127.0.0.1', 27017, {}),
db = new mongodb.Db('acl', serverdb, {safe:true});
app.use(function(req,res,next){
req.db = db;
next();
});和我在中间件文件中的代码,存储在/routes中的js文件中。
var express = require('express');
var router = express.Router();
/* GET home page. */
router.get('/', function(req, res) {
var db = req.db;
var collection = db.collection('comments');
collection.find().toArray(function(err, docs) {
console.log("Printing docs from Array");
if (err) {
console.log(err);
} else {
console.log(docs);
}
});
db.close();
});
module.exports = router;发布于 2014-08-09 20:39:08
奇怪的是,替换了这段代码
var mongodb = require('mongodb'),
serverdb = new mongodb.Server('127.0.0.1', 27017, {}),
db = new mongodb.Db('acl', serverdb, {safe:true});有了这个
var db = require("mongojs").connect("localhost:27017/acl", ["comments"]);一切都变了。不要再暂停了。一点推特就能让它返回数据。
发布于 2014-08-09 00:49:28
就像@legalize说的,最好是让一个mongo连接池运行,而不是在每次请求时打开和关闭连接。也许有点像这就是答案
至于为什么会出现错误,这可能是因为您的db.close()需要在collection.find().toArray()回调中,否则它甚至会在查询发生之前关闭连接。
最后,您需要在某个地方渲染模板,以便将响应发送回客户端。
把所有这些放在一起,你可能会想要这样的东西:
router.get('/', function(req, res) {
var db = req.db;
var collection = db.collection('comments');
collection.find().toArray(function(err, docs) {
console.log("Printing docs from Array");
db.close();
if (err) {
console.log(err);
} else {
console.log(docs);
res.render( 'yourJadeTemplate', { docs : docs } );
}
});
});(但您真的不想关闭每个请求的连接,特别是因为不是为每个请求打开连接)
https://stackoverflow.com/questions/25213981
复制相似问题