首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >尝试使用node.js挂起系统返回集合

尝试使用node.js挂起系统返回集合
EN

Stack Overflow用户
提问于 2014-08-09 00:13:16
回答 2查看 221关注 0票数 0

我有一个node.js应用程序,它使用我创建的mongodb数据库。在它中,我有一个简单的集合,名为注释,当我调用db.comments.find({})时,它的内容是{“作者”:"me",“注释”:“这是注释”}。

然而,当我试图访问这个收藏,以显示在我的玉视图,它超时后,难以置信的时间。错误对象的Console.log显示它要么是MongoError,要么是应用程序破坏了连接。我的问题是为什么会发生这种事?循环和连接参数似乎没有错误。下面是我必须连接的东西,存储在app.js中

代码语言:javascript
复制
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文件中。

代码语言:javascript
复制
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;
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-08-09 20:39:08

奇怪的是,替换了这段代码

代码语言:javascript
复制
var mongodb = require('mongodb'),
serverdb = new mongodb.Server('127.0.0.1', 27017, {}),
db = new mongodb.Db('acl', serverdb, {safe:true});

有了这个

代码语言:javascript
复制
var db = require("mongojs").connect("localhost:27017/acl", ["comments"]);

一切都变了。不要再暂停了。一点推特就能让它返回数据。

票数 0
EN

Stack Overflow用户

发布于 2014-08-09 00:49:28

就像@legalize说的,最好是让一个mongo连接池运行,而不是在每次请求时打开和关闭连接。也许有点像这就是答案

至于为什么会出现错误,这可能是因为您的db.close()需要在collection.find().toArray()回调中,否则它甚至会在查询发生之前关闭连接。

最后,您需要在某个地方渲染模板,以便将响应发送回客户端。

把所有这些放在一起,你可能会想要这样的东西:

代码语言:javascript
复制
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 } );
        }
    }); 
});

(但您真的不想关闭每个请求的连接,特别是因为不是为每个请求打开连接)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25213981

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档