【问题标题】:Resolving bcrypt return promise解决 bcrypt 返回承诺
【发布时间】:2022-01-18 01:21:09
【问题描述】:

我正在尝试将 bcrypt 哈希函数的结果传递给下面的用户模型。

我似乎无法思考如何有效地解决这个承诺。

代码如下:

router.post("/", async (req, res) => {
  req.body = sanitize(req.body);

  // SHA-256
  /* const bitArray = sjcl.hash.sha256.hash(req.body.data[2].value);
  const passwordHashed = sjcl.codec.hex.fromBits(bitArray); */

  const saltRounds = 10;

  const password = req.body.data[2].value;
  var passwordHashed;

  async function hash() {
    return await bcrypt.hash(password, saltRounds, function (err, hash) {});
  }

  const user = new User({
    username: req.body.data[0].value,
    email: req.body.data[1].value,
    password: hash(),
  });

  try {
    await user.save();
    res.status(200).json({ msg: "Success" });
  } catch (e) {}
});

这是我迄今为止尝试过的,这可能是错误的

【问题讨论】:

  • bcrypt.hash(…) 是否首先会返回一个承诺?看起来它正在接受回调
  • 它确实接受回调,并且 cosole 日志哈希确实显示了所需的输出。但是试图将哈希分配给它分配一个promies而不是哈希值的范围之外的值

标签: javascript express promise


【解决方案1】:

不要将回调传递给bcrypt.hash,然后你可以await它。

const user = new User({
    username: req.body.data[0].value,
    email: req.body.data[1].value,
    password: await bcrypt.hash(password, saltRounds),
});

【讨论】:

  • 解决了,谢谢。我仍在努力理解承诺。
  • @asdasdf 很高兴为您提供帮助。
猜你喜欢
  • 2021-05-25
  • 1970-01-01
  • 2013-05-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-19
  • 2019-06-15
  • 2016-07-20
相关资源
最近更新 更多