【发布时间】:2014-05-24 13:06:52
【问题描述】:
我遇到了一个小问题。我正在尝试制作一个小型 API 来检查用户是否已存在于我的数据库中。
我使用 express 和 routes,所以我可以像“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();
});
});
【问题讨论】:
标签: mysql node.js express routes