簡體   English   中英

如何通過node.js調用mongodb collection getall?

[英]How to call mongodb collection getall by node.js?

我想從mongo db獲取整個通知列表,但它返回empty([])數組,我也知道我需要回調或更短的方法。 您是否有想法通過node.js從mongodb收集任何數據? 如果我調用此/ Notify方法( http://127.0.0.1:5000/Notify

var MongoClient = require('mongodb').MongoClient;
var express = require("express");
var app = express();


format = require('util').format;
MongoClient.connect('mongodb://127.0.0.1:27017/Test', function (err, db) {
    if (err) {
        throw err;
    } else {
        console.log("successfully connected to the database");
    }
    db.close();
});

app.get('/Notifies', function (req, res) {

    // BAD! Creates a new connection pool for every request
    console.log('connected');
    MongoClient.connect('mongodb://127.0.0.1:27017/Test', function (err, db) {
        if (err) throw err;

        var coll = db.collection('Notifies');
        var arr = [];
        coll.find({}, function (err, docs) {
            docs.each(function (err, doc) {
                if (doc) {
                    console.log(doc);
                    arr.push(doc);

                } else {
                    res.end();
                }
            });
        });
        return res.json(arr);
    });
});

var port = Number(process.env.PORT || 5000);
app.listen(port, function () {
    console.log("Listening on " + port);
})

不要用於docs.each而不是.toArray ,它會直接返回一個數組,然后使用Json.stringify將其轉換為json字符串數組

MongoClient.connect('mongodb://127.0.0.1:27017/Test', function (err, db) {
    if (err) throw err;

    var coll = db.collection('Notifies');

    coll.find({}).toArray(function (err, result) {
        if (err) {
            res.send(err);
        } else {

            res.send(JSON.stringify(result));
        }
    })

});

問題是在實際的數據庫操作發生之前,您正在從函數中返回空數組。 您需要移動該行return res.json(arr); 進入find功能:

app.get('/Notifies', function (req, res) {

    // BAD! Creates a new connection pool for every request
    console.log('connected');
    MongoClient.connect('mongodb://127.0.0.1:27017/Test', function (err, db) {
        if (err) throw err;

        var coll = db.collection('Notifies');
        var arr = [];
        coll.find({}, function (err, docs) {
            console.log(docs);
            docs.each(function (err, doc) {
                if (doc) {
                    console.log(doc);
                    arr.push(doc);

                } else {
                    res.end();
                }
            });
            return res.json(arr);
        });
    });
});

另外,為了將來使用,請勿在嵌套函數中重復使用變量名(您擁有3個使用變量err函數)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM