首页 > 解决方案 > 使用 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

标签: javascriptmysqlnode.js

解决方案


尝试使用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

推荐阅读