Отправка результатов MongoDB find () с помощью Express - PullRequest
0 голосов
/ 25 сентября 2019

Я новичок в NodeJS, и я пытаюсь подключиться к MongoDB. Я подготовил запрос и могу просмотреть вывод на сервере, переместив курсор.Но я хочу отправить вывод find () в ответ.

var cursor = db.collection('dbLocations').find(
     {$and: [
        {type: locationType}, 
        {createdAt : { "$gte": new Date(createdAt), "$lt": date1 }}
      ]}).skip(skip).limit(count);

Теперь я получаю сообщение об ошибке типа Cannot set headers after they are sent to the client, если я делаю строку concate, а затем JSON.stringify, я попробовал pretty (), но этодает мне ошибку skip(...).limit(...).toString(...).pretty is not a function or skip(...).limit(...).pretty is not a function.Я совершенно не могу понять, как конвертировать, так как мне не совсем понятна концепция callback (), и все решения имеют это.Есть ли простой stringify, парсинг или довольно своеобразное решение.Ниже мой экспресс-фрагмент для получения, сейчас он выглядит очень грязно.Я хочу отправить вывод find () вместо случайных вещей.

app.get('/api/first', function(request, response) {
    response.writeHead(200, {'Content-Type': 'application/json'});
    var locationType = request.body.type;
    var createdAt = request.body.createdAt;
    //var pageNumber = parseInt(request.body.pageNumber);
    console.log(locationType);
    console.log(createdAt);
    //console.log(pageNumber);
    var date1 = new Date(createdAt);
    date1.setDate(date1.getDate() + 1);
    var count = 2;
    var str="";
    var skip;
    if(request.body.pageNumber)
        skip = parseInt((request.body.pageNumber-1)*count);
    else
        skip = 0;
    MongoClient.connect(url, function(err, client) {
    if (err) throw err;
    console.log('Connected');
    var db = client.db('locationapi');
    var cursor = db.collection('dbLocations').find(
         {$and: [
            {type: locationType}, 
            {createdAt : {"$gte": new Date(createdAt), "$lt": date1}}
         ]}
      ).skip(skip).limit(count);

        cursor.each(function(err, doc) {

        if(err) throw err;
     if(doc !== null) {
      console.log(doc); str=str+doc;
     } else client.close();
    });
    client.close();
  });
   var myObj = {
      name: 'jgj',
      job: 'Ninja'
    };   // random stuff
    response.end(JSON.stringify(myObj));
});

1 Ответ

0 голосов
/ 25 сентября 2019
db.collection('dbLocations').find({
  $and: [{
    type: locationType
  }, {
    createdAt: {
      "$gte": new Date(createdAt),
      "$lt": date1
    }
  }]
}, {
  skip: skip, 
  limit: count
}).toArray(function (err, docs) { 
  if (err) return res.status(500).send({error: err})
  res.send(docs)
});

https://mongodb.github.io/node-mongodb-native/3.3/api/Collection.html#find

https://mongodb.github.io/node-mongodb-native/3.3/api/Cursor.html#toArray

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...