mysql - 如何让返回等待 MySQL 连接结束?节点.js
问题描述
我是 Node.js 的新手,我正在 Wix 上测试一些代码,以检查我的数据库是否在允许创建新帐户之前已经存在帐户名称(我目前故意不使用 WHERE 标记进行学习目的)。
目前,方法检查帐户名称在连接完成之前返回,不允许正确进行检查。
任何帮助表示赞赏。
export function tryToCreateAccount(login, password)
{
var mysql = require('mysql');
var connection = mysql.createConnection({
host: 'host',
user: 'user',
password: 'pass',
database: 'db'
});
if(checkAccountName(login, connection))
{
console.log("Name didn't exist.");
}
else
{
console.log("Name Existed.");
}
}
function checkAccountName(account_name, connection)
{
var accountNameAvailable = true;
connection.connect(function (err)
{
if(err) throw err;
connection.query("SELECT login FROM accounts", function (err, result)
{
if (err) throw err;
for(var i = 0; i < result.length ; i++)
{
if(result[i].login == account_name)
{
console.log("Should of been false");
connection.end;
accountNameAvailable = false;
}
}
});
connection.end;
});
return accountNameAvailable;
}
解决方案
我弄清楚为什么它什么也没做,因为连接结束,下一个调用太晚了,下一个在连接代码块内。
const mysql = require('mysql');
const connection = mysql.createConnection({
host: 'host',
user: 'user',
password: 'pass',
database: 'db'
});
export function tryToCreateAccount(login, password)
{
checkAccountName(login, connection, function(err, accountNameAvailable)
{
if(err || !accountNameAvailable){
console.log("Name didn't exist.");
}
else
{
console.log("Name Existed.");
}
})
}
function checkAccountName(login, connection, next)
{
var accountNameAvailable = false;
connection.connect(function (err)
{
if(err) next(err);
connection.query("SELECT login FROM accounts", function (err, result){
if (err) next(err);
for(var i = 0; i < result.length ; i++)
{
if(result[i].login == login)
{
accountNameAvailable = true;
}
}
next(null, accountNameAvailable);
connection.end();
});
});
}
推荐阅读
- laravel - 如何在 laravel 中获取更新的记录 ID?
- javascript - JS 闭包上下文对象的寿命?
- mysql - /etc/init.d/ 目录中缺少 mysql
- visual-studio-code - 具有排除和包含 glob 模式的扩展激活
- reactjs - 向 URL 添加额外的查询参数后,React 组件状态清除
- database - 如何使用firebase在xamarin中指定当前的关键节点?
- ffmpeg - 如何在 FFmpeg 中使用受限/上限比特率模式
- python - 如何在 python 的 Microsoft 团队选项卡中进行身份验证
- json - 如何使用数组列表解析 Json
- jsf - h:inputText 在输入值为空白并提交给支持 bean 时保留旧输入值