[英]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.