Node.js から PostgreSQL へ接続

2019年4月13日

はじめに

Node.js から PostgreSQL サーバーに接続し、問い合わせをする。

環境

  • Ubuntu 16.04 LTS
  • Node.js 8.12.0

Node.js から PostgreSQL サーバーへの問い合わせ

Node.js で PostgreSQL サーバーに接続するには、pg モジュールを用いる。

準備。

$ mkdir postgresql
$ cd postgresql
$ npm init
$ npm install --save pg

index.js

const { Client } = require('pg');

const client = new Client({
    user: 'xxxx',
    host: 'localhost',
    database: 'xxxx',
    password: 'xxxx',
    port: 5432,
});

client.connect(err => {
    if(err){
        console.error(err.stack);
    }
});

const query = 'select * from sample where keyword like \'%aaa­%\'';

client.query(query)
.then(res => {
    console.log(res.rows);
    client.end();
})
.catch(err => {
    console.error(err.stack);
    client.end();
});

実行。

$ node index.js

問い合わせは次のようにも書ける。

client.query(query, (err, res) => {
    if(err){
        console.error(err.stack);
        client.end();
    }else{
        console.log(res.rows);
        client.end();
    }
});

client.query() の処理は非同期に実行されるため、問い合わせ結果を得て変数に入れて...ということをする前にするっと次の処理に行ってしまう。そこで、非同期関数に入れて待ちを入れる。

(async () => {

let rows;

await client.query(query)
.then(res => {
    rows = res.rows;
    client.end();
})
.catch(err => {
    console.error(err.stack);
    client.end();
});

console.log(rows);

})();