首页 > 解决方案 > MongoDB 从正文中查找、更新和验证空字段

问题描述

在更新字段之前,我需要检查以下值是否不为空。因此,我按照以下方式构建,但不要检索我的 msg 错误,也不要让我更新配置文件用户。

router.post("/profileEdit/:id", ensureAuthenticated, (req, res) => {
  var id = mongoose.Types.ObjectId(req.params.id);
  let errors = [];
  if (!req.body.firstName) {
    errors.push({ text: "Please add your first name" });
  }
  if (!req.body.lastName) {
    errors.push({ text: "Please add your last name" });
  }
  if (!req.body.username) {
    errors.push({ text: "Please add your username" });
  }
  if (!req.body.email) {
    errors.push({ text: "Please add you email" });
  }

  if (errors.length > 0) {
    res.render("users/profileEdit", {
      errors: errors,
      firstName: req.body.firstName,
      lastName: req.body.lastName,
      username: req.body.username,
      email: req.body.email
    });
  } else {
    User.updateOne(
      { _id: id },
      {
        $set: {
          firstName: req.body.firstName,
          lastName: req.body.lastName,
          username: req.body.username,
          email: req.body.email
        }
      }
    ).then(user => {
      req.flash("success_msg", "Profile Updated");
      res.redirect("/users/profile/" + id);
    });
  }
});

如何验证每个字段的 req.body 是否为空?在此验证之后,我需要更新 mongodb 中的信息。

标签: javascriptnode.jsmongodbmongodb-query

解决方案


解决方案如下:

在 else 之前,我只需要找到 _id:id,这样,由于上面的字段是空的,应用程序将返回填充字段的相同页面。

router.post("/profileEdit/:id", ensureAuthenticated, (req, res) => {
  var id = mongoose.Types.ObjectId(req.params.id);
  let errors = [];

  if (!req.body.firstName) {
    errors.push({ text: "Please add your first name" });
  }
  if (!req.body.lastName) {
    errors.push({ text: "Please add your last name" });
  }
  if (!req.body.username) {
    errors.push({ text: "Please add your username" });
  }
  if (!req.body.email) {
    errors.push({ text: "Please add you email" });
  }

  if (errors.length > 0) {
    User.find(
      { _id: id },
      {
        firstName: 1,
        lastName: 1,
        username: 1,
        email: 1,
        password: 1,
        _id: { $elemMatch: { _id: id } },
        date: 1
      }
    ).then(user => {
      res.render("users/profileEdit", {
        user: user
      });
    });
  } else {
    User.updateOne(
      { _id: id },
      {
        $set: {
          firstName: req.body.firstName,
          lastName: req.body.lastName,
          username: req.body.username,
          email: req.body.email
        }
      }
    ).then(user => {
      req.flash("success_msg", "Profile Updated");
      res.redirect("/users/profile/" + id);
    });
  }
});

推荐阅读