我正在使用Knex JS进行用户身份验证,以便从用户那里获取电子邮件和密码,并连接到PostgreSQL进行身份验证。
router.post('/login', async (req, res) => {
knex.select('email','password').from('users')
.where('email', '=',req.body.email)
.then((data) => {
const isValid = bcrypt.compareSync(req.body.password, data[0].password);
if (isValid === true) {
res.render('index-v1');
}
});
});
但是render函数没有渲染ejs索引文件,但是localhost没有响应。 预先感谢您的帮助。
答案 0 :(得分:0)
因此,正如评论所建议的那样,您的路由没有覆盖两条可能的路径,这显然导致服务器缺乏响应。请记住,如果您不告诉它以res.render
或类似的方式进行响应,它将不会响应,从而使您的客户端处于挂起状态。
router.post('/login', async (req, res) => {
try {
const data = await knex.select('email', 'password')
.from('users')
.where('email', '=', req.body.email)
const isValid = bcrypt.compareSync(req.body.password, data[0].password);
if (isValid) {
res.render('index-v1');
return
}
res.render('error-page');
} catch (e) {
res.render('error-page');
}
});
换句话说:如果密码不正确,我们仍然需要响应客户端。如果存在某种数据库错误(或者说用户不存在),我们仍然需要响应客户端。确切的响应方式当然取决于您,但这就是您需要考虑的结构。