我正面临一个小问题。我试图做一个小API来检查用户是否已经存在于我的数据库中。nodejs express/routes和mysql
我使用快递和路线,所以我可以像“http://example.com/check/user/john”查询,它应该输出:true或false,取决于用户是否存在于数据库中。
在我的路线文件,我有下面的代码:
var mysql = require('mysql');
var pool = mysql.createPool({
host: 'localhost',
user: 'root',
password: '123456',
database: 'nodejs'
});
module.exports = function(app){
app.get('/register/check/u/:username', function(req, res){
var output = 'false';
pool.getConnection(function(err, conn) {
query = conn.query('SELECT * FROM users WHERE username LIKE ?', [req.params.username]);
query.on('error', function(err){
throw err;
});
query.on('result', function(row){
var output = 'true';
console.log(row.email);
console.log(output);
});
conn.release();
});
res.render('register/check_username', { output: output});
});
);
的问题是,res.render('register/check_username', { output: output});
总会输出:false
,但在我的控制台登录它显示true
当用户已经存在。
任何想法为什么输出变量没有更新?
解决方案: 正如akaphenom所解释的,pool.getConnection被初始化为一个非阻塞的进程,因此我的第一个代码自动地将输出发送为false。这里的工作代码:
app.get('/register/check/u/:username', function(req, res){
pool.getConnection(function(err, conn) {
var output = 'false';
query = conn.query('SELECT * FROM users WHERE username LIKE ?', [req.params.username]);
query.on('error', function(err){
throw err;
});
query.on('result', function(row){
output = 'true';
});
query.on('end', function(result){
res.render('register/check_username', { output: output});
});
conn.release();
});
});
感谢。我不确定非阻塞的东西,用你的答案更好地理解它。 –
NP如果它适合您,请接受答案,以便其他人同样面临困难,因为您知道这是一个合适的解决方案。 – akaphenom