Berikut adalah contoh yang saya gunakan untuk menghubungkan node.js ke database Postgres saya.
Antarmuka di node.js yang saya gunakan dapat ditemukan di sini https://github.com/brianc/node-postgres
var pg = require('pg');
var conString = "postgres://YourUserName:YourPassword@localhost:5432/YourDatabase";
var client = new pg.Client(conString);
client.connect();
//queries are queued and executed one after another once the connection becomes available
var x = 1000;
while (x > 0) {
client.query("INSERT INTO junk(name, a_number) values('Ted',12)");
client.query("INSERT INTO junk(name, a_number) values($1, $2)", ['John', x]);
x = x - 1;
}
var query = client.query("SELECT * FROM junk");
//fired after last row is emitted
query.on('row', function(row) {
console.log(row);
});
query.on('end', function() {
client.end();
});
//queries can be executed either via text/parameter values passed as individual arguments
//or by passing an options object containing text, (optional) parameter values, and (optional) query name
client.query({
name: 'insert beatle',
text: "INSERT INTO beatles(name, height, birthday) values($1, $2, $3)",
values: ['George', 70, new Date(1946, 02, 14)]
});
//subsequent queries with the same name will be executed without re-parsing the query plan by postgres
client.query({
name: 'insert beatle',
values: ['Paul', 63, new Date(1945, 04, 03)]
});
var query = client.query("SELECT * FROM beatles WHERE name = $1", ['john']);
//can stream row results back 1 at a time
query.on('row', function(row) {
console.log(row);
console.log("Beatle name: %s", row.name); //Beatle name: John
console.log("Beatle birth year: %d", row.birthday.getYear()); //dates are returned as javascript dates
console.log("Beatle height: %d' %d\"", Math.floor(row.height / 12), row.height % 12); //integers are returned as javascript ints
});
//fired after last row is emitted
query.on('end', function() {
client.end();
});
UPDATE: - query.on
Fungsinya sekarang sudah usang dan karenanya kode di atas tidak akan berfungsi sebagaimana mestinya. Sebagai solusi untuk tampilan ini di: - query.on bukanlah sebuah fungsi
Pendekatan modern dan sederhana: pg-promise :
Lihat juga: Cara mendeklarasikan modul database Anda dengan benar .
sumber
Hanya untuk menambahkan opsi yang berbeda - Saya menggunakan Node-DBI untuk terhubung ke PG, tetapi juga karena kemampuan untuk berbicara dengan MySQL dan sqlite. Node-DBI juga menyertakan fungsionalitas untuk membuat pernyataan pemilihan, yang berguna untuk melakukan hal-hal dinamis dengan cepat.
Sampel cepat (menggunakan informasi konfigurasi yang disimpan di file lain):
config.js:
sumber
Salah satu solusi dapat menggunakan
pool
klien seperti berikut:Anda dapat melihat detail lebih lanjut tentang sumber daya ini .
sumber
Slonik adalah alternatif jawaban yang diajukan oleh Kuberchaun dan Vitaly.
Slonik menerapkan penanganan koneksi yang aman ; Anda membuat kumpulan koneksi dan pembukaan / penanganan koneksi ditangani untuk Anda.
postgres://user:password@host:port/database
adalah string koneksi Anda (atau secara lebih kanonis, URI atau DSN koneksi).Manfaat dari pendekatan ini adalah bahwa skrip Anda memastikan bahwa Anda tidak pernah secara tidak sengaja meninggalkan koneksi yang menggantung.
Manfaat lain menggunakan Slonik meliputi:
sumber
Kita juga bisa menggunakan postgresql-easy . Itu dibangun di atas node-postgres dan sqlutil . Catatan: pg_connection.js & your_handler.js ada di folder yang sama. db.js ada di folder config yang ditempatkan.
pg_connection.js
./config/db.js
tangan_anda.js
sumber