繁体   English   中英

使用 NODE.js 在 MySQL 数据库上查找 email

[英]Finding email on MySQL database with NODE.js

我正在尝试通过简单的登录来验证用户身份。 I'm using node.js and mysql in my project, what I am doing is checking if the email exists in the field email y my accounts table. 我将查询结果传递给一个常量行,然后检查它的长度,如果它返回大于 0,则意味着它找到了一些东西(?),这是我的片段:

console.log(testEmail) //it does receives an email
console.log(password) //it does receives a password

const rows = await pool.query('SELECT * FROM accounts WHERE email = ?', [testEmail.email]);
console.log(rows); //row comes out empty

这是完整的方法:

passport.use('local.signin', new LocalStrategy({
    usernameField: 'email',
    passwordField: 'password',
    passReqToCallback: true
}, async(req, username, password, done) => {
    const {email} = req.body;
    const testEmail = {
        email
    };
    console.log(testEmail)
    console.log(password)

    const rows = await pool.query('SELECT * FROM accounts WHERE email = ?', [testEmail.email]);
    console.log(rows);
    if (rows.length > 0) {
        const user = rows[0];
        const validPassword = await helpers.matchPassword(password, user.password);
        if(validPassword){
            done(null, user, req.flash('success', 'Welcome!'));
        } else{
            done(null, false, req.flash('message', 'Incorrect password'));
        }
    } else{
        return done(null, false, req.flash('message', 'Email not found'));
    }
}));

添加 email 和密码的控制台结果:

{ email: 'irwin.inoa@gmail.com' }
123456

添加我的表定义:

  `id` int(11) NOT NULL,
  `username` varchar(50) NOT NULL,
  `password` char(60) NOT NULL,
  `email` varchar(100) NOT NULL

关于如何解决这个问题的任何想法,我错过了什么吗?

更新:

如下所述,通过 object testEmail 传递 email 属性可以解决此问题。

testEmail.email. 

感谢您的时间

原始答案

正如我在文档中看到的, pool.query() function 具有回调或返回 promise。 您可以按如下方式捕获结果:

// callback

pool.query('SELECT * FROM accounts WHERE email = ?', [testEmail], (err, rows) => {
    if (err) {  
        return console.error('Error executing query', err.stack);
    }
    console.log(rows);
});


// promise

pool.query('SELECT * FROM accounts WHERE email = ?', [testEmail])
.then(rows => {
    return console.log(rows);
})
.catch(err => {
    return console.error('Error executing query', err.stack);
});

编辑

好的,所以只是为了测试,试试这段代码,看看表是否正确。 也许我们没有正确地将参数传递给查询。

// return all records of the table

pool.query('SELECT * FROM accounts LIMIT 100', [], (err, rows) => {
    if (err) {  
        return console.error('Error executing query', err.stack);
    }
    console.log(rows);
});

// Another way to pass the parameter

pool.query('SELECT * FROM accounts WHERE email = $1::text', [testEmail], (err, rows) => {
    if (err) {  
        return console.error('Error executing query', err.stack);
    }
    console.log(rows);
});

您的查询可能有错误,但由于您没有尝试/捕获您的查询,所以您不知道发生了什么。 你可能想做这样的事情:

let rows = [];
try{
   rows = await pool.query('SELECT * FROM accounts WHERE email = ?', [testEmail.email]);
}catch(err){
   console.log("Query Error", err);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM