Node.js 将简单回调转换为异步等待

Node.js 将简单回调转换为异步等待,node.js,express,Node.js,Express,我发现很难将此用户控制器代码转换为异步等待。有人能帮助我,指导我怎么做吗。因此,我还可以将任何回调更改为异步等待。 另外,如果有人能提供一个好的源代码,以便我可以阅读有关AsyncWait以及如何正确应用它们的内容 const User = require("../models/user") exports.getUserById = (req, res, next, id) => { User.findById(id).exec((error, user)

我发现很难将此用户控制器代码转换为异步等待。有人能帮助我,指导我怎么做吗。因此,我还可以将任何回调更改为异步等待。 另外,如果有人能提供一个好的源代码,以便我可以阅读有关AsyncWait以及如何正确应用它们的内容

const User = require("../models/user")

exports.getUserById = (req, res, next, id) => {
    User.findById(id).exec((error, user) => {
        if (error || !user) {
            return res.status(400).json({
                error: "No user was found in DB"
            })
        }
        req.profile = user
        next()
    })
}

exports.getUser = (req, res) => {
    req.profile.salt = undefined;
    req.profile.encrypted_password = undefined;

    return res.json(req.profile)
}

exports.getAllUsers = (req, res) => {
    User.find().exec((error, users) => {
        if (error || !users) {
            return res.status(400).json({
                error: "No users was found in DB"
            })

        }

        return res.json(users)
    })
}

exports.updateUser = (req, res) => {
    User.findByIdAndUpdate(

        { _id: req.profile._id },
        { $set: req.body },
        { new: true, useFindAndModify: false },
        (error, user) => {
            if (error) {
                return res.status(400).json({
                    error: "You are not authorized to update this info"
                })
            }
            user.salt = undefined;
            user.encrypted_password = undefined;
            res.json(user)
        }
    )
}

它应该是这样的:

const User = require("../models/user");

exports.getUserById = async (req, res, next, id) => {
  let user = await User.findById(id);
  try {
    if (!user) {
      return res.status(404).json({
        error: "No user was found in DB"
      });
    }
    req.profile = user;
    next();
  } catch (err) {
    return res.status(500).json({
      error: "Something went wrong"
    });
  }
};

exports.getUser = (req, res) => {
  req.profile.salt = undefined;
  req.profile.encrypted_password = undefined;

  return res.json(req.profile);
};

exports.getAllUsers = async (req, res) => {
  let users = await User.find();
  try {
    if (users.length < 1) {
      return res.status(404).json({
        error: "No users was found in DB"
      });
    }
    return res.json(users);
  } catch (err) {
    return res.status(500).json({
      error: "Something went wrong"
    });
  }
};

exports.updateUser = async (req, res) => {
  try {
    let user = await User.findByIdAndUpdate(
      { _id: req.profile._id },
      { $set: req.body },
      { new: true, useFindAndModify: false }
    );

    user.salt = undefined;
    user.encrypted_password = undefined;
    return res.json(user);
  } catch (err) {
    return res.status(400).json({
      error: "You are not authorized to update this info"
    });
  }
};
const User=require(“../models/User”);
exports.getUserById=async(req、res、next、id)=>{
let user=wait user.findById(id);
试一试{
如果(!用户){
返回res.status(404.json)({
错误:“在数据库中找不到用户”
});
}
req.profile=用户;
next();
}捕捉(错误){
返回res.status(500).json({
错误:“出了点问题”
});
}
};
exports.getUser=(请求、回复)=>{
req.profile.salt=未定义;
req.profile.encrypted_password=未定义;
返回res.json(请求配置文件);
};
exports.getAllUsers=异步(请求、回复)=>{
let users=等待User.find();
试一试{
if(users.length<1){
返回res.status(404.json)({
错误:“在数据库中找不到用户”
});
}
返回res.json(用户);
}捕捉(错误){
返回res.status(500).json({
错误:“出了点问题”
});
}
};
exports.updateUser=async(请求、回复)=>{
试一试{
let user=wait user.findByIdAndUpdate(
{{u id:req.profile.{u id},
{$set:req.body},
{new:true,useFindAndModify:false}
);
user.salt=未定义;
user.encrypted_password=未定义;
返回res.json(用户);
}捕捉(错误){
返回res.status(400).json({
错误:“您无权更新此信息”
});
}
};

如果在数据库中找不到任何用户,则应发回
404
错误
400意味着糟糕的请求。

您可以通过用Promise包装函数来实现您的要求。在您的示例中,您应该使用Ifaruki给出的解决方案,因为mongoose已经支持承诺

function waitSeconds(seconds) {
  return new Promise(res => {
     setTimeout(() => {
       res();
     }, seconds * 1000)
  })
}

async function foo() {
  console.log("Hello");
  await waitSeconds(5);
  console.log("World");
}

您可以在javascript中了解有关异步的更多信息

如果我们使用异步,我认为我们不能使用execawait@ABHISHEKBARTHWAL是的,移除it@lfaruki你能推荐我能找到的任何来源吗learn@ABHISHEKBARTHWAL博客、教程、私人项目。最重要的是对javascript有一个坚实的理解。还可以阅读他们在小示例中使用的
await
的文档