Node.js NodeJs+;Postgres synchronus连接到数据库以填充变量
我在postgreSQL中使用nodeJs express 3框架,我使用下面的脚本在DB中查找用户名并填充一个变量,以便将其传递给我的视图。 这是我的剧本:Node.js NodeJs+;Postgres synchronus连接到数据库以填充变量,node.js,postgresql,express,Node.js,Postgresql,Express,我在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
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);
});
});
不能将返回值放入异步函数中。相反,您需要使用回调,您的代码可能是这样的:
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);
});
});
err
包含什么?将console.log(err)
放在console.log(result)
之前,然后发布它包含的内容。嗨,真的很抱歉我的表名出错了,现在它工作得很好,谢谢。嗨,这是工作fnccheckusernameavability(用户名,函数(err,result){console.log(result);})代码>它在控制台上打印,但这是fnccheckusernameavability(用户名、函数(err、result){myVar=result;})
不会填充我的变量它也是异步的吗?只要它在回调中,它就会填充变量。如果为空,那么您可能在某个地方有错误。err
包含什么?将console.log(err)
放在console.log(result)
之前,然后发布它包含的内容。嗨,真的很抱歉我的表名出错了,现在它工作得很好,谢谢。嗨,这是工作fnccheckusernameavability(用户名,函数(err,result){console.log(result);})代码>它在控制台上打印,但这是fnccheckusernameavability(用户名、函数(err、result){myVar=result;})
不会填充我的变量它也是异步的吗?只要它在回调中,它就会填充变量。如果它为空,那么您可能在某个地方有错误。