require函数在方法中的函数内部不起作用

时间:2019-11-26 13:03:51

标签: node.js http server backend bcrypt

我正在使用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

我不知道如何解决。

1 个答案:

答案 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”,因为我总是发现它为“未定义”