MongoDBからデータを取得して、表示させる簡単なシステムですが、練習のため取り組んでいます。
toArrayではうまくデータベースの値を表示させることができるのですが、streamを使用した際に、
Error: Can't set headers after they are sent. at validateHeader (_http_outgoing.js:494:11) at ServerResponse.setHeader (_http_outgoing.js:501:3) at ServerResponse.header (/home/vagrant/blog/node_modules/express/lib/response.js:767:10) at ServerResponse.contentType (/home/vagrant/blog/node_modules/express/lib/response.js:595:15) at ServerResponse.send (/home/vagrant/blog/node_modules/express/lib/response.js:145:14) at done (/home/vagrant/blog/node_modules/express/lib/response.js:1004:10) at tryHandleCache (/home/vagrant/blog/node_modules/ejs/lib/ejs.js:228:10) at View.exports.renderFile [as engine] (/home/vagrant/blog/node_modules/ejs/lib/ejs.js:437:10) at View.render (/home/vagrant/blog/node_modules/express/lib/view.js:135:8) at tryRender (/home/vagrant/blog/node_modules/express/lib/application.js:640:10)
上記のエラーが発生してしまいます。
Javascript
1var MongoClient = require('mongodb').MongoClient; 2var posts = [{title:'name' , body:'body'}]; 3exports.index = function(req,res){ 4 MongoClient.connect("mongodb://localhost/posts", function(err, db) { 5 if (err) { return console.dir(err); } 6 console.log("connected to db"); 7 //このstream処理がエラーを発生させています。 8 var stream = db.collection('post').find({}).stream(); 9 stream.on('data',function(docs){ 10 db.close(); 11 res.render('posts/index.ejs',{items:docs}); 12 }); 13 14 /*下記のtoArrayであれば呼び出せます。 15 db.collection("post", function(err, collection) { 16 collection.find({}).toArray(function(err,docs){ 17 db.close(); 18 res.render('posts/index.ejs',{items:docs}); 19 }); 20 }); 21*/ 22}); 23}; 24
コメントで書いてある通りなのですが、toArrayでは問題なく出力できるのに対し、streamでは先述した通りのエラーが発生します。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2017/11/22 08:02