Nodejs запрашивает отдельные данные вместо всех из коллекции mongodb - PullRequest
0 голосов
/ 03 сентября 2018

Я пытаюсь получить данные из коллекции mongodb. Мой код выполняет только одну строку данных в формате JSON. Но когда я консоль регистрирую свои данные, я вижу все данные строки.

const mongoose = require('mongoose');
const AllMinisters  = require('../models/allMinisters');
var db;
var mongodb = require("mongodb");

// Initialize connection once
mongoose.connect("******", { useNewUrlParser: true }, function(err, database) {
if(err) return console.error(err);
db = database;
// the Mongo driver recommends starting the server here because most apps *should* fail to start if they have no DB.  If yours is the exception, move the server startup elsewhere.
});

exports.getAllMinisters = (req,res,next)=>{
    db.collection("users").find({}, function(err, docs) {
        if(err) return next(err);
        docs.each(function(err, doc) {

        if(doc) {
            console.log(doc);
            var response = {
                statusCode: 200,
                headers:  { 'Content-Type': 'application/json' },
                body: doc
                }
                res.end(JSON.stringify(response));
        }
        });
    });
};

Этот вывод в JSON как enter image description here

Однако консольный отчет показывает все enter image description here

Как показать все данные строк в формате JSON

1 Ответ

0 голосов
/ 03 сентября 2018

В вашем коде docs.each, который будет повторяться по всем doc, полученным из запроса find() (который является массивом), и внутри этого блока each вы отправляете ответ, то есть res.end(JSON.stringify(response));, который выполняется сразу для первой записи, и, следовательно, вы получаете один объект в качестве ответа вместо массива.

Чтобы вернуть массив, вам нужно поместить res.end(JSON.stringify(response)); вне цикла each() с функцией toArray. Вы даже можете удалить цикл each(), если это не требуется. Итак, ваш код будет выглядеть примерно так:

exports.getAllMinisters = (req, res, next)=>{
  db.collection('users').find({}).toArray(function (err, docs) {
    if (err) {return next(err);}
    docs.each(function (err, doc) {
      if (doc) {
        //code for single doc
        console.log(doc);
      }
    });
    res.statusCode = 200;
    res.setHeader('Content-Type', 'application/json');
    res.end(JSON.stringify(docs));
  });
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...