节点发布 将新记录插入我的数据库不会返回新条目的数据

Node-postgres Inserting a new record into my database does not return the new entry's data

本文关键字:返回 新条目 数据 数据库 我的 新记录 插入 节点      更新时间:2023-09-26
下面是

执行查询的路由:

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 不应该包含一个数组,其中包含一个表示我刚刚在数据库中创建的行的对象吗?

好吧,我已经想通了。

显然,我试图使用尚未在 Node-Postgres 中实现的功能,如下所述:https://github.com/brianc/node-postgres/wiki/Todo

在查询结果回调中插入/更新/选择行数

虽然这在课程外会非常棒,但有可能 通过将返回 id 甚至返回 * 添加到 查询。这对我来说适用于单列。我将对此进行测试 倍数以及此包对该案例的处理。我很安静 确定在邮政中一定是可能的。

因此,我更新了查询以返回新行的所有数据:

var queryString = "INSERT INTO Users (first_name, last_name) VALUES (" + "'" + [user.first_name, user.last_name].join("','") + "'" + ") RETURNING *";

然后,我修改了查询以考虑"row"事件处理程序,该处理程序在将新行输入数据库时触发。正是在这个事件处理程序的上下文中,我可以访问新的行数据(根据上面的"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 });
});

啊,它有效!

更新查询并在查询末尾添加" 返回 * "

  var queryString = "INSERT INTO Users (id, first_name, last_name) VALUES (" + "'" + [user.id, user.first_name, user.last_name].join("','") + "'" + ") RETURNING *";

获取结果.行[0]

在查询中添加RETURNING fieldName1, fieldName or *是上述问题的解决方案。

完美工作!