簡體   English   中英

NodeJs + Postgres同步連接到數據庫以填充變量

[英]NodeJs + Postgres synchronus connection to Database to populate variable

我正在使用帶有postgreSQL的nodeJs express 3框架,正在使用以下腳本在DB中查找用戶名並填充變量,以便將其傳遞給視圖。 這是我的腳本:

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);
  });
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM