【发布时间】:2013-06-23 13:15:22
【问题描述】:
我有以下简单的节点应用程序,用于将数据插入到 postgres 数据库中:
var pg = require('pg');
var dbUrl = 'tcp://user:psw@localhost:5432/test-db';
pg.connect(dbUrl, function(err, client, done) {
for (var i = 0; i < 1000; i++) {
client.query(
'INSERT into post1 (title, body, created_at) VALUES($1, $2, $3) RETURNING id',
['title', 'long... body...', new Date()],
function(err, result) {
if (err) {
console.log(err);
} else {
console.log('row inserted with id: ' + result.rows[0].id);
}
});
}
});
在终端中运行 node app.js 后,它会将 1000 行插入数据库,然后应用程序挂起,并且不会终止。我做错了什么?我查看了 pg 模块示例,但没有发现我在做任何不同的事情……
【问题讨论】:
-
由于您的 for 循环作为同步代码执行,应用程序挂起。当它在循环中迭代时,节点可执行文件无法响应其他请求。此外,client.query 调用是同步的,因此当 for 循环运行该查询时,您将使用所有这些查询猛击数据。
标签: node.js node-postgres