使用Node.js和MySQL检查数据库中的现有元素

时间:2019-01-02 05:49:10

标签: javascript mysql node.js

所以这是问题所在,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

1 个答案:

答案 0 :(得分:0)

尝试使用Promise,它们将帮助您摆脱“回叫”的压力

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