可以检查记录是否存在同步吗?

时间:2019-03-05 18:14:44

标签: node.js mongodb express mongoose

基本上,我想在数据库中存储一个user,在执行此操作之前,我需要验证该user的字段。所以我有这个结构:

exports.save = function(req, res)
{
   let errors = validate(req.body);

   if(!errors.length)
   {
       //add user
       res.status(200).send(true);
   }
   else{
       res.status(500).send("oh bad");
   }
};

function validate(user)
{
   let errors = [];

   if (User.findOne({ email: user.email })) {
      errors.push({ msg: 'Email already registered!' });
   }
} 

上面的代码根本无法工作,因为NodeJS处理异步操作。我可以通过以下方式解决此“问题”:

User.findOne({ email: email }).then(user => {
  if (!user) {
    //add user
    res.status(200).send(true);
 });

但是我想在功能validate中添加检查,有没有办法做到这一点?抱歉,这个问题可能很愚蠢,但我是NodeJS

的新手

1 个答案:

答案 0 :(得分:1)

由于没有本质上使exports.save同步的特性,所以使validate异步可能最容易(而且我们也可以通过使用promise和async使之变得现代)。

exports.save = async function(req, res) {
  const errors = await validate(req.body);

  if (!errors.length) {
    //add user
    res.status(200).send(true);
  } else {
    res.status(500).send("oh bad");
  }
};

async function validate(body) {
  const errors = [];
  const user = await User.findOne({ email: body.email });
  if (user) {
    errors.push({ msg: "Email already registered!" });
  }
  return errors;
}
相关问题