2013-07-03 35 views
6

Gặp sự cố khi nhận kết quả từ các truy vấn SELECT trong nút-postgres. Bây giờ các hàng trống ở cuối mã khóa. Lựa chọn này chỉ trả về một giá trị tiếp theo từ một chuỗi trong POSTGRESQL. Tôi biết rằng bạn không thể lấy kết quả từ gọi lại, nhưng có ai ở đây đã sử dụng nút postgres (hoặc bất kỳ mô-đun cơ sở dữ liệu khác để nút) mà có thể biết một sửa chữa?Trả lại kết quả từ CHỌN bằng nút-postgres

client.connect(); 
var query = client.query("SELECT nextval(\'idgenerator\');"); 
var rows = []; 
query.on('row', function(row, res) { 
    rows.push(row); 
}); 
query.on('end', function(result) { 
    console.log(result.rowCount + ' rows were received'); 
}); 
//client.end(); 
console.log(rows); 

Trả lời

5

Bạn sẽ phải tìm hiểu javascript/nodejs và lập trình sự kiện.

query.on('row', function() { /*CODE*/ }) có nghĩa là: "khi một hàng được đọc, hãy thực thi CODE".

Điều này là không đồng bộ; do đó query.on() đăng ký sự kiện và trả về.

So when console.log(rows) được gọi, hàng vẫn trống, vì chưa có sự kiện 'hàng' nào được kích hoạt trên truy vấn.

Bạn nên thử đặt 'console.log (hàng)' vào phần thân của trình xử lý sự kiện query.on ('end').

Ở mọi nơi trong mã, bạn cũng nên viết một số console.log. Bạn sẽ xem điều không đồng bộ.

+1

Cảm ơn bạn. Chỉ cần phải hoàn toàn hiểu được callbacks trong javascript. – magnudae

4

Nếu chúng tôi không gọi phương thức result.addRow(), mảng hàng sẽ trống trong sự kiện kết thúc.

var query = client.query("SELECT firstname, lastname FROM emps ORDER BY lastname, firstname"); 

query.on("row", function (row, result) { 
    result.addRow(row); 
}); 

query.on("end", function (result) { 
    console.log(JSON.stringify(result.rows, null, " ")); 
    client.end(); 
}); 

Ref: http://nodeexamples.com/2012/09/21/connecting-to-a-postgresql-database-from-node-js-using-the-pg-module/

+0

có thể trả về mảng các hàng trong một biến thay vì hiển thị trong bảng điều khiển không? –

+1

bên trong trình nghe "kết thúc", bạn có thể trả về kết quả bằng cách 1. gọi hàm gọi lại - sẽ cập nhật phản hồi cho các ổ cắm được yêu cầu (sử dụng socket.io) ví dụ: callback (result); 2. sử dụng thư viện "q" ví dụ: var q = require ('q'); ... // đợi dữ liệu truy vấn \ n truy vấnDb (thông số) .then (hàm (dữ liệu) { }); ... var truy vấnDb = function (args) { var deferred = q.defer(); ... truy vấn.on ('kết thúc', hàm (kết quả) { trì hoãn.truy cập (kết quả); }); trả lại deferred.promise; } – abdulwadood

+0

Cảm ơn sự quan tâm của bạn, tôi đã tìm thấy các js lớn –

Các vấn đề liên quan