Невозможно получить данные в формате Json из MongoDb с помощью NodeJs - PullRequest
0 голосов
/ 16 октября 2018

Я использую Node.Js и MongoDb в качестве внутреннего сервиса.У меня есть 4 документа в моей коллекции, и у каждого документа есть 3 поля с именами _id, Name и Image.Все, что я хочу, это получить данные в формате 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 голосов
/ 16 октября 2018

Глядя на эту страницу 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.

Дайте мне знать, если это поможет.

0 голосов
/ 16 октября 2018

Вам нужно избавиться от «result.forEach», результат уже находится в массиве.res.json ({'Name': doc.Name}, {'Image': doc.Image}) => res.json (результат)

0 голосов
/ 16 октября 2018

Попробуйте это может помочь вам

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();
   });
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...