以下是执行查询的路径:
userRouter.route("/new")
.post(function (req, res) {
var user = req.body;
pg.connect(connectionString, function (error, client, done) {
var queryString = "INSERT INTO Users (id, first_name, last_name) VALUES (" + "'" + [user.id, user.first_name, user.last_name].join("','") + "'" + ")";
console.log(queryString);
client.query(queryString, function (error, result) {
console.log(result.rows);
done();
});
});
});
问题是我试图在第二个控制台中引用的“结果”值基本上是空白的:
{
command: 'INSERT',
rowCount: 1,
oid: 0,
rows: [],
fields: [],
_parsers: [],
RowCtor: null,
rowAsArray: false,
_getTypeParser: [Function: bound ]
}
不应该result.rows包含一个数组,其中包含一个表示我刚在数据库中创建的行的对象吗?
答案 0 :(得分:8)
好吧,我已经弄清楚了。
显然,我试图使用Node-Postgres中尚未实现的功能,如下所述:https://github.com/brianc/node-postgres/wiki/Todo
在查询结果回调中插入/更新/选择行数
虽然这会非常棒,但有可能 通过添加RETURNING id或甚至RETURNING *来获取行为 查询。这适用于我的单列。我会测试一下 这个包的倍数和处理。我很 确实一定有可能在postgres。
因此,我更新了我的查询以返回新行的所有数据:
var queryString = "INSERT INTO Users (first_name, last_name) VALUES (" + "'" + [user.first_name, user.last_name].join("','") + "'" + ") RETURNING *";
然后我修改了我的查询以考虑"行"事件处理程序,在将新行输入数据库时触发。在此事件处理程序的上下文中,我可以访问新的行数据(根据" RETURNING"上面的参数:
var query = client.query(queryString, function (error, result) {
done();
});
query.on("row", function (row, result) {
console.log("Inside the row event handler.");
res.render("users/show", { user: row });
});
Aaaand有效!
答案 1 :(得分:1)
更新查询并在查询末尾添加“ RETURNING * ”
var queryString = "INSERT INTO Users (id, first_name, last_name) VALUES (" + "'" + [user.id, user.first_name, user.last_name].join("','") + "'" + ") RETURNING *";
获取 result.rows [0]