无法使用NodeJ从MongoDb提取Json格式的数据

时间:2018-10-16 07:03:11

标签: javascript node.js mongodb mongodb-query

我正在使用Node.Js和MongoDb作为后端服务。我的收藏集中有4个文档,每个文档都有3个字段,分别为_idNameImage。我只想获取Json格式的数据。

但是它显示出如下错误:

Error image

这是我的代码:

var express = require('express');    
var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://localhost:27017/";
var bodyParser = require('body-parser');

var app = express();

app.use(bodyParser.json());
app.use(bodyParser.urlencoded({extended:true})); 

app.post('/offers',(req, res) => {

     MongoClient.connect(url, (err, db) => {           
        if(err) throw err;
        var obj = req.body.place;
        var dbo = db.db('Tiffino_db');

        dbo.collection("Offers")
            .find({ Name: obj },{ projection: { _id: 0 } })
            .toArray((err, result) => {
                 result.forEach((err, doc) => {
                     if (err) {
                         console.log("Error:", +err);
                     }
                     else { 
                        res.json({'Name':doc.Name},{'Image':doc.Image});
                    }
                });
            });
    });
});

请让我知道我在上面的代码中做错了什么。

3 个答案:

答案 0 :(得分:0)

尝试一下可能会对您有所帮助

var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://localhost:27017/";

MongoClient.connect(url, function(err, db) {
   if (err) throw err;
   var dbo = db.db("mydb");
   dbo.collection("Offers").find({}).toArray(function(err, result) {
       if (err) throw err;
       console.log(result);
      db.close();
   });
});

答案 1 :(得分:0)

查看此页面http://mongodb.github.io/node-mongodb-native/2.2/api/Collection.html#find,主要区别是您对forEach函数的使用应如下所示:

var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://localhost:27017/";
var bodyParser = require('body-parser');

var app = express();

app.use(bodyParser.json());
app.use(bodyParser.urlencoded({extended:true})); 

app.post('/offers',(req, res) => {

     MongoClient.connect(url, (err, db) => {           
        if(err) throw err;
        var obj = req.body.place;
        var dbo = db.db('Tiffino_db');

        dbo.collection("Offers")
            .find({ Name: obj },{ projection: { _id: 0 } })
            .toArray((err, result) => {
                 result.forEach((doc) => { // <-- removed err in forEach's fat arrow
                     if (err) {
                         console.log("Error:", +err);
                     }
                     else { 
                        res.json({'Name':doc.Name},{'Image':doc.Image});
                    }
                });
            });
    });
});

不确定如何生成NaN,但是forEach的回调第一个参数无疑是数组中的实际元素。这也可能对toArray隐藏错误。

让我知道是否有帮助。

答案 2 :(得分:0)

您需要摆脱“ result.forEach”结果已经在数组中。 res.json({'Name':doc.Name},{'Image':doc.Image})=> res.json(结果)