Node.js async try/catch 从 mongoose 获取数据时出错

Node.js async try/catch error when getting data from mongoose

我正在尝试制作一个非常基本的登录页面,其中包含三个 routes LOGIN, REGISTER,以及 欢迎。这个想法是您可以使用您选择的 nameemailpassword 注册用户此时您将被重定向到登录页面,您可以在其中使用您在进入欢迎页面之前创建的信息。

到目前为止,我一直将用户信息作为对象保存到一个空数组中,然后使用 passport-config 搜索它以测试凭据。显然,这是不安全的,并且在服务器重启后也无法保存信息。为了解决这个问题,我开始将 mongoose 集成到我的项目中。它工作正常,但现在,当我试图检索我的用户列表以根据用户传递的信息检查它时,我收到以下错误:

ReferenceError: Cannot access 'user' before initialization

这让我很困惑,因为我的代码:

try {
  const user = await User.find(new RegExp(user.userEmail, 'i'))
  console.log(user)
  if (user == null) {
    return done(null, false, { message: "No User With That Email" })
  }
  try {
    console.log(password, user.userPassword)
    if (await bcrypt.compare(password, user.userPassword, function (e) { })) {
      return done(null, user)
    } else {
      return done(null, false, { message: "Password Incorrect" })
    }
  } catch (e) {
    return done(e)
  }
} catch (e) {
  return done(e)
}

包含在 try/catch 语句中。还有bcrypt部分可以忽略,仅供参考

首先,为什么我的 try/catch 仍然抛出错误,其次,为什么我会收到 initialization 错误?

谢谢,感谢您的回复。

问题好像出在这行代码

const user = await User.find(new RegExp(user.userEmail, 'i'))

在这一行中,您尝试访问 user.userEmail 属性,但您尚未对用户变量进行事件初始化(您正在该代码行中对其进行初始化)