我正在使用Node.js构建应用程序的后端,并且正在使用postgresql作为数据库。我在执行登录时遇到问题。更准确地说,我正在使用bcrypt模块,它在查询执行所调用的函数中不起作用。这是代码:
const login = async (request, response) => {
const username = request.body.username
console.log(request.body)
pool.query('SELECT * FROM public."User" WHERE username = \'{' + username + '}\'', (error, results) => {
if (error) {
return response.status(400).send("Cannot find user: "+username)
}
try {
if(await bcrypt.compare(request.body.password, results.rows[0].password.toString())) {
response.send('Success')
} else {
response.send('Not allowed')
}
} catch {
response.status(500).send("Server error")
}
})
}
问题是我执行了查询并且可以正常工作,但是当它到达第二个if语句时,问题是这样的:
if(await bcrypt.compare(request.body.password, results.rows[0].password.toString())) {
^^^^^^
SyntaxError: Unexpected identifier
我不知道如何解决。
答案 0 :(得分:0)
我还试图通过将检索到的密码保存在变量中来使try / catch语句在pool.query函数之外,如下所示:
const login = async (request, response) => {
const username = request.body.username
var hashedPassword
console.log(request.body)
pool.query('SELECT * FROM public."User" WHERE username = \'{' + username + '}\'', (error, results) => {
if (error) {
return response.status(400).send("Cannot find user: "+username)
}
hashedPassword = results.rows[0].password.toString()
})
try {
if(await bcrypt.compare(request.body.password, hashedPassword)) {
response.send('Success')
} else {
response.send('Not allowed')
}
} catch {
response.status(500).send("Server error")
}
}
但是以这种方式,try / catch语句在查询之前执行,实际上我什至不知道是否可以通过这种方式设置变量“ hashedPassword”,因为我总是发现它为“未定义”