記録として残しておきたいブログ

主にプログラミングについて書きます

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