Node.js error: invalid frontend message type 0 ってエラー出た
var pg = require('pg'); var http = require('http'); var fs = require('fs'); var ejs = require('ejs'); var testEjs = fs.readFileSync('public_html/postgres.ejs', 'utf-8'); // httpサーバーの作成 var server = http.createServer(); var conString = 'postgres://postgres:tmgykng324@localhost/cas_db'; var client = new pg.Client(conString); server.on('request', function(req, res) { if(req.url != '/favicon.ico') { // postgreSQLに接続 client.connect(function(err) { if(err) { // エラー時 return console.error('could not connect to postgres', err); } var userData = [2]; userData[0] = []; // user_id userData[1] = []; // create_date // SELECTのSQLを実行 client.query('SELECT user_id, create_date FROM m_user;', function(err, result) { if(err) { // エラー時 return console.error('error running query', err); } // 表示用に格納 for(var i = 0; i < result.rowCount; i++) { console.log(result.rows[i].user_id + ' ' + result.rows[i].create_date); userData[0][i] = result.rows[i].user_id; userData[1][i] = result.rows[i].create_date; } var content = ejs.render(testEjs, { 'userData': userData }); client.on('error', function(err){ return console.log(err); }); client.on('drain', client.end.bind(client)); res.writeHead(200, {'Content-Type': 'text/html'}); res.write(content); res.end(); }); }); } }); server.listen(8888); console.log('server listening...');
上のコードを実行してブラウザでlocalhost:8888に2回アクセスすると
error: invalid frontend message type 0
ってエラー出た
var client = new pg.Client(conString);
この記述はリクエストイベントの中で書くべきらしい。
client.connect();
の前あたりかな?
参考サイト
javascript - Can not close postgreSQL connection within Node.js script - Stack Overflow