javascript - 使用 Node.js 和 MySQL 检查数据库中的现有元素
问题描述
所以这是问题所在,其中的所有内容con.query(query, function (err, result, fields)
都不会被调用。因此,这是关于验证用户注册时,他接收的电子邮件尚未被接收的代码部分。argv[0]
包含用户输入的电子邮件(没有错,我调试过)。因此,我显然使用相同的电子邮件创建了两个帐户,但第二个帐户从未被标记(该功能正在继续,而不是返回“userexists”)。
var mysql = require('mysql');
var con = mysql.createConnection(Credentials). // The connection is established, it's not a problem.
var query = "SELECT id FROM accounts_data WHERE email = '" + argv[0] + "'";
var r;
con.query(query, function (err, result, fields) {
if (err)
return "failed";
if(result != undefined)
return "userexists" // The if is never checked
});
谢谢你。
编辑:
大家好,所以console.log(results.length)
正在打印正确的结果,但我怎样才能将结果提供给r
?因为最后一个console.log(r)
还在打印 0。
var r = 0;
var sql = 'SELECT * FROM accounts_data WHERE email = ' + con.escape(argv[0]);
con.query(sql, function (error, results, fields) {
if (error) throw error;
console.log(results.length); // Right result
r = results.length; // Not giving the result to r
});
console.log(r); // Not the right result
解决方案
尝试使用Promise
's,他们将帮助摆脱'回调地狱'
const userExists = async emailAddress => new Promise((resolve, reject) => {
con.query(`
SELECT EXISTS(
SELECT id FROM accounts_data WHERE email = ?
);
`,
[emailAddress],
(err, result) => {
if (err) { reject(err); }
resolve(result);
}
)
);
await userExists('abc@example.com') // => boolean
推荐阅读
- javascript - 赛普拉斯:将数组作为命令行参数传递
- ios - 从 UIView 的子视图中的所有 UILabel 中排除 UIButton 的标签
- scala - 无法使用 SSO 钱包将 Oracle 与 Apache Spark 连接
- javascript - tfjs nodejs:util_1.promisify 不是函数
- html - 如何在 mvc 应用程序中显示文件夹中的任何一个图像或第一张图像
- html - CSS flex 和 space-between 动态
- c# - 如何增加控制台应用程序c#中数字的百分比?
- java - 使用哈希函数时如何检查记录是否已经存在?
- r - 将 RPostgres 或 RPostgreSQL dbGetQuery() 参数传递给 IN 运算符
- vue.js - Vue js:访问 dist 文件夹中组件的 prod.env.js 或数据变量