更新 mongoose 中的 `let` 变量 schema.save

Updating `let` variable in mongoose schema.save

我有一些这样的代码:

let addUser = (req, res) => {
    let user;
    let message = "";
    let status = 200;

    bcrypt.hash(password, salt_rounds, (err, hash) => {
        user = new user({
            ...
            password: hash,
        });

        user.save(err => {
            if(err) {
                message = "No success";
                status = 400;
            } else {
                message = "success";
            }
        });

        res.status(status).json({
            message: message,
        });
    });
};

但是,message 变量在发送响应时未定义。我已经搜索了一段时间,不幸的是,没能找到与此问题类似的解决方案。

最终,我希望能够在 bcrypt/.save 闭包中更新消息、状态等变量。我曾尝试使用回调和解决承诺,我认为由于天真而无法正常工作。无论如何,我们将不胜感激!

注意:我不想使用任何其他库来解决这个问题(我真的怀疑首先需要它)

提前致谢!

user.save 更改为 returns Promise,然后对该 Promise 调用 .then

let addUser = (req, res) => {
  let user;
  let status = 200;

  bcrypt.hash(password, salt_rounds, (err, hash) => {
    user = new user({
      password: hash,
    });

    const savePromise = new Promise((resolve, reject) => {
      user.save(err => {
        if (err) {
          status = 400;
          reject("No success");
        } else {
          resolve("success");
        }
      });
    });
    savePromise.then(message => 
      res.status(status).json({ message })
    ).catch(message => 
      res.status(status).json({ message })
    );
  });
};

试试这个,将 message 键放在 双引号中

let addUser = (req, res) => {
    let user;
    let message = "";
    let status = 200;

    bcrypt.hash(password, salt_rounds, (err, hash) => {
        user = new user({
            ...
            password: hash,
        });

        user.save(err => {
            if(err) {
                message = "No success";
                status = 400;
            } else {
                message = "success";
            }
        });

        res.status(status).json({
            "message": message,
        });
    });
};