微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在没有数据库的情况下使用 bcrypt 散列密码

如何解决在没有数据库的情况下使用 bcrypt 散列密码

我创建了一个端点来注册新用户Rep1 Rep2 Rep3

因为我没有使用数据库,所以我通过将新用户推送到数组中来更新数组,然后使用 /register 将此新数组写入 json 文件

以下是注册新用户代码

fs.writeJSONFile()

问题似乎出在我在数据库中查找用户函数中:

router.post("/register",m.checkFieldsPost,async (req,res) => {
  const { email,password } = req.body;
  const id = { id: helper.getNewId(users) };

  try {
    const user = await helper.findUser(users,email);
    console.log(`user is ${user}`);
    if (user)
      return res.status(400).json({
        message: "That user already exists!",});
    // Generate salt
    const salt = await bcrypt.genSalt(10);

    // Hash password
    const hashedPassword = await bcrypt.hash(password,salt);

    const newUser = {
      ...id,password: hashedPassword,email,};

    await users.push(newUser);
    await helper.writeJSONFile(filename,users);

    return res.status(201).json({
      message: `New user was created`,user: newUser,originalPassword: password,hashedPassword,});
  } catch (err) {
    res.status(500).json({ message: err.message });
    // res.status(500).json({ message: "Mesasge from the catch block" });
  }
});

我正在尝试注册一个新用户,我首先使用上述函数检查 function findUser(array,email) { return new Promise((resolve,reject) => { const row = array.find((r) => r.email == email); if (!row) { reject({ message: "User not found",}); reject(null); } resolve(row); }); }; 文件中是否已存在该电子邮件

json

然而,似乎如果没有找到用户函数调用就会结束,我会向客户端发回一个状态代码。我拒绝承诺的方式有问题吗?我怎么能从承诺拒绝中返回 const user = await helper.findUser(users,email);

解决方法

拒绝承诺将其标记为拒绝/失败。 await 关键字将抛出您传递给 reject(...) 的任何内容。因此,当找不到用户时,您的代码会因异常而中止。您应该在 await helper.findUser(...) 调用周围添加 try/catch。或者,如果您希望 await 返回 null 而不是抛出,请调用 resolve(null)

这也意味着您不应该两次调用 reject,或者更糟的是,为与您的代码当前所做的相同的承诺同时调用 rejectresolve。调用其中一个函数并不等同于返回,该函数仍然必须干净地返回。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。