node.js - NodeJs + Postgres 同步连接到数据库以填充变量

标签 node.js postgresql express

我在 postgreSQL 中使用 nodeJs express 3 框架,我在使用下面的脚本在数据库中查找用户名并填充一个变量,以便我可以将它传递给我的 View 。 这是我的脚本:

app.js
var app = express();
app.use(express.bodyParser());
......
function fncCheckUsernameAvailability(vstrUsername){
    var pg = require("pg");
    var client = new pg.Client({user: 'xxx', password: 'xxxx', database: 'xxx', host: 'example.com'});
    var response = "";
    client.connect(function(err) {
  if(err) {
    return console.error('could not connect to postgres', err);
  }
 client.query("SELECT username FROM users WHERE username ='"+vstrUsername+"'", function(err, result) {
    if(err) {
      return console.error('error running query', err);
    }
        if(result.rows[0] == undefined){
            //console.log("Username available");
            response = "Username available";//Populating The variable here
        }else{
            //console.log("Username already taken");
            response = "Username already taken";//Populating The variable here
        }
    client.end();
  });
    });
    return response;
}


app.post("/Signup", function(req, res){
var username = req.body.username;
var Response = fncCheckUsernameAvailability(username);
console.log(Response);
}

响应变量始终是“未定义的”,那么我如何才能让该脚本等待数据库检查完成以填充“响应”变量?

最佳答案

您不能将返回值放入异步函数中。相反,您需要使用回调,这就是您的代码的样子:

function fncCheckUsernameAvailability(vstrUsername, callback) {
  client.connect(function(err) {
    if (err) {
      callback(err, null);
      return;
    }

    client.query("SELECT username FROM users WHERE username ='" + vstrUsername + "'", function (err, result) {
      client.end();
      if (err) {
        callback(err, null);
        return;
      }

      if (result.rows[0] == undefined) callback(null, 'Username available.');
      else callback(null, 'Username taken.');
    });
  });
};

你会像这样使用函数:

app.post("/Signup", function(req, res) {
  var username = req.body.username;
  fncCheckUsernameAvailability(username, function(err, result) {
    console.log(result);
  });
});

关于node.js - NodeJs + Postgres 同步连接到数据库以填充变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18793770/

相关文章:

json - 从 GROUP BY 语句在 Postgresql 中创建 JSON 值

postgresql - 我如何为数据每隔几个月明显不同的表配置分析阈值?

postgresql - Postgres 时间与时区的比较

javascript - 特定 URL 导致 axios nuxt 模块不运行回调

node.js - 快速资源自定义映射

mysql - 发送 put 请求时,updatedAt 列未使用最新日期时间更新

node.js - 如何使 npm stop 永远终止正确的操作

javascript - 测试 gRPC 函数

node.js - pdfmake - fs.readFileSync 不是函数错误

node.js - 如何在 Promise 中设置 body?