【问题标题】:prepared statements node-postgresql error with null result准备好的语句 node-postgresql 错误,结果为空
【发布时间】:2015-11-23 18:09:48
【问题描述】:

我是 node.js 和 postgresql 的新手。我已经与 postgres db 连接并执行一些测试代码。在我将使用准备好的语句之后。我创建一个示例登录脚本。如果用户存在,则返回用户名,否则返回消息“无效的用户名或密码”。如果用户名和密码正确,则返回用户名。但不会出现数据,然后无法返回消息。我的观点是,执行 cliend.end() 函数后控件会崩溃。

这是我的代码

UserLogin.get = function(userName, callBack) {
    pg.connect(pgConString, function(err, client, done) {
        if (err) {
            callBack("DB connection failed. " + err, null);
            return;
        }
        var selectQuery="SELECT * from  "  + TABLE + " WHERE userName=($1)";
        var query=client.query({
                text:selectQuery,
                values:[userName],
                name:"selectQuery"});

                query.on("error", function (error) {
                 callBack("DB fetch failed. Error Message: " + err, null);});

                query.on('row', function(row) {
                callBack(null, row);});

                query.on("end", function (result) {
                client.end();
                return;
                 });
            });     
}

如果行为空,不返回回调。如果 row_result 不为空,它的工作正常.. 如何...????有什么想法...???

【问题讨论】:

  • 尝试关闭而不是结束

标签: node.js postgresql prepared-statement node-postgres


【解决方案1】:

我终于得到了答案。感谢您的支持

UserLogin.get = function(userName, callBack) {
    pg.connect(pgConString, function(err, client, done) {
        if (err) {
            callBack("DB connection failed. " + err, null);
            return;
        }
        var selectQuery="SELECT * from  "  + TABLE + " WHERE userName=($1)";
       var query=client.query({
            text:selectQuery,
            values:[loginId],
            name:"selectQuery"});

            query.on("error", function (error) {
             callBack("DB fetch failed. Error Message: " + err, null);return;});

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

            query.on('end', function (result) {
            callBack(null,result.rows);
            client.end();
            return;
             });
        });     
}

在我的旧代码中,每次查询从数据库中获取 1 行时都会调用回调。我只是改变了逻辑

【讨论】:

  • 更简单的用法,请查看pg-promise ;)
  • 我们正在使用 pg 模块。因为 pg-promise 模块不能支持所有的 postgres 版本。
  • 这是不可能的,因为pg-promise 使用pg 模块。
【解决方案2】:

你的代码

query.on('row', function(row) {
  callBack(null, row);
});

表示每次查询从数据库中获取 1 行时都会调用回调。在查询结果为0的情况下,永远不会调用回调。

【讨论】:

  • 我需要重新运行所有行。
  • 如果有任何想法在单个回调中返回所有行
  • 您应该使用这种形式的 client.query(提供回调)github.com/brianc/node-postgres/wiki/… - 这将为您提供结果中的所有行。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-06-18
  • 1970-01-01
  • 2015-05-27
  • 2014-06-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多