【node.js】expressにてCan't set headers after they are sentでサーバーが落ちる
はじめに
最近ちょっといじってますが、またよくわからず簡単な事にはまってる気がする・・・
やりたかったことはurlパラメータを受け取ってmysqlを検索。結果をjsonで返すというだけです
で、mysqlからデータ取得してconsole.logすると取得できるところまでは確認できたのですがレスポンスを返そうとすると以下のエラー
router.get("/", function(req, res, next) { db.query("select * from users", function(err, rows) { if (!err) { res.json(rows);// ★ココで落ちる } }); });
コンソール出力
/var/www/html/example.com/public/node_modules/mysql/lib/protocol/Parser.js:78 throw err; // Rethrow non-MySQL errors ^ Error: Can't set headers after they are sent. at ServerResponse.OutgoingMessage.setHeader (_http_outgoing.js:348:11) at ServerResponse.header (/var/www/html/example.com/public/node_modules/express/lib/response.js:718:10) at ServerResponse.send (/var/www/html/example.com/public/node_modules/express/lib/response.js:163:12) at ServerResponse.json (/var/www/html/example.com/public/node_modules/express/lib/response.js:249:15) at Query._callback (/var/www/html/example.com/public/controllers/login.js:11:7) at Query.Sequence.end (/var/www/html/example.com/public/node_modules/mysql/lib/protocol/sequences/Sequence.js:85:24) at Query._handleFinalResultPacket (/var/www/html/example.com/public/node_modules/mysql/lib/protocol/sequences/Query.js:144:8) at Query.EofPacket (/var/www/html/example.com/public/node_modules/mysql/lib/protocol/sequences/Query.js:128:8) at Protocol._parsePacket (/var/www/html/example.com/public/node_modules/mysql/lib/protocol/Protocol.js:280:23) at Parser.write (/var/www/html/example.com/public/node_modules/mysql/lib/protocol/Parser.js:74:12)
原因
「Can't set headers after they are sent」とありそのままでした・・・
別の箇所で既に別のjsonをレスポンスを返していました
router.get("/", function(req, res, next) { db.query("select * from users", function(err, rows) { if (!err) { res.json(rows);// ★ココで落ちる } }); // 何か処理してjsonを返してた ・・・ res.json({・・・}); });
以上です