2015-07-05 3 views
0

Имея некоторые проблемы с созданием нескольких response.write: s из вызова api в node.js. Вот код.Как сгенерировать несколько response.write: s с json в node.js/express?

// get the articles 
app.get('/api/articles', function(req, res) { 


res.writeHead(200, { 
    "Content-Type": "application/json" 
}); 
// use mongoose to get all feeds in the database 
Feed.find(function(err, feeds) { 
    // if there is an error retrieving, send the error. nothing after  res.send(err) will execute 
    if (err) 
     res.send(err); 

    feeds.forEach(function(feedModel) { 
     //for each feed in db get articles via feed-read module 
     feed(feedModel.url, function(err, articles) { 
      articles.forEach(function(articleModel) { 
       console.log(JSON.stringify(articleModel));//works!! 
       res.write(JSON.stringify(articleModel));//doesnt produce output. 
      }); 
     }); 
    }); 
}); //end find function 
res.end(); 
}); //end api call 
+0

Hi! После некоторого вмешательства я получил его для работы, удалив строки res.writeHead и res.end. По-видимому, я буду запускать два writeHead с предыдущим кодом и удалив узел линий или экспресс будет «автоматически» исправлять заголовки. – user3422843

+0

У меня появилась идея: http://stackoverflow.com/questions/17628052/nodejs-console-log-works-but-response-write-doesnt – user3422843

ответ

1

Необходимо, чтобы end() внутри обратного вызова нет в конце.

res.end(JSON.stringify(articleModel)); 
+0

Хорошо. попробовал это. Теперь на самом деле появляется первый канал, но не все остальные. Я так думаю, потому что мы на самом деле заканчиваем преждевременно, прежде чем мы закончим обработку остальных каналов? как бы я объединил все articleModels в списке, а затем просто использовал один оператор res.end для отправки ответа? – user3422843

+0

Тогда вам понадобятся [обещания] (https://www.promisejs.org/) или механизм управления обратными вызовами. Но это отдельный вопрос. – beautifulcoder

0

После некоторого мастерить я получил его на работу, удалив строки res.writeHead и res.end. По-видимому, я буду запускать два writeHead с предыдущим кодом и удалив узел линий или экспресс будет «автоматически» исправлять заголовки. /Stefan

+0

У меня появилась идея написать: http://stackoverflow.com/questions/17628052/nodejs-console-log-works-but-response-write-doesnt – user3422843

Смежные вопросы