node.js - 要求函数在方法内的函数内不起作用
问题描述
我正在使用 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
我无法弄清楚如何解决它。
解决方案
我还尝试在 pool.query 函数之外使用 try/catch 语句,方法是将检索到的密码保存在变量中,如下所示:
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”,因为我总是发现它是“未定义的”
推荐阅读
- docker - docker container ls --size 不准确,如何获得准确的容器大小?
- angular - 带有视图模型前缀 (vm) 的 Angular 8 UI 模型绑定
- tfs - 将文件夹检入 TFS 服务器后从 TFS 中删除
- python - 从 python 控制台清除多行
- python - 让 Python 程序运行另一个 Python 程序并让它们同时运行?
- javascript - Electron 桌面应用程序在它应该是离线应用程序时尝试 TCP 连接
- java - 如何断言对象列表具有一组具有特定值的属性
- c# - 使用 EPPlus 将 Web 表单 DataGrid 导出到 excel
- javascript - HowlerJS 步进函数不会在搜索时更新范围输入值
- java - SOAP 错误无法解组