كيفية إرجاع استجابة JSON معقدة باستخدام Node.js؟




express mongoose (2)

في Express 3 يمكنك استخدام res.json مباشرةً ({foo: bar})

res.json({ msgId: msg.fileName })

انظر documentation

باستخدام nodejs والتعبير ، أريد إرجاع كائن واحد أو عدة كائنات (صفيف) باستخدام JSON. في الكود أدناه ، أقوم بإخراج كائن JSON واحد في كل مرة. إنه يعمل ولكن هذا ليس بالضبط ما أريد. الاستجابة الناتجة ليست استجابة JSON صالحة لأن لدي العديد من الكائنات.

إنني أدرك تمامًا أنه يمكنني ببساطة إضافة كل الكائنات إلى مصفوفة وإرجاع مجموعة معينة في res.end. ومع ذلك أخشى أن هذا قد يصبح ثقيلًا للعملية والذاكرة المكثفة.

ما هي الطريقة الصحيحة لتحقيق ذلك مع nodejs؟ هل query.each الطريقة الصحيحة للاتصال؟

app.get('/users/:email/messages/unread', function(req, res, next) {
    var query = MessageInfo
        .find({ $and: [ { 'email': req.params.email }, { 'hasBeenRead': false } ] });

    res.writeHead(200, { 'Content-Type': 'application/json' });   
    query.each(function(err, msg) {
        if (msg) { 
            res.write(JSON.stringify({ msgId: msg.fileName }));
        } else {
            res.end();
        }
    });
});

لا أعرف ما إذا كان هذا بالفعل مختلفًا ، ولكن بدلاً من تكراره على مؤشر الاستعلام ، يمكنك فعل شيء كالتالي:

query.exec(function (err, results){
  if (err) res.writeHead(500, err.message)
  else if (!results.length) res.writeHead(404);
  else {
    res.writeHead(200, { 'Content-Type': 'application/json' });
    res.write(JSON.stringify(results.map(function (msg){ return {msgId: msg.fileName}; })));
  }
  res.end();
});




mongoose