收到错误ValidatorError:必须提供路径`id`。在mongo DB

时间:2019-09-13 02:20:07

标签: javascript node.js mongodb mongoose mongoose-schema

在将我的document保存到收藏夹时出现此错误

ValidatorError:路径id是必需的。

这是我的代码 https://codesandbox.io/s/lively-tree-hd0fo

const BlogPost = new Schema({
  id: { type: String, required: true, unique: true },
  empid: String,
  date: Date
});

BlogPost.pre("save", function(next) {
  var blog = this;
  console.log();
  var data = `${blog.empid}-${blog.date}`;
  blog.id = crypto
    .createHash("md5")
    .update(data)
    .digest("hex");
  next();
});

在尝试保存数据时出现错误。 一个

pp.get("/saveData", async () => {
  try {
    var blog = new BlogPostModel({
      empid: "test123",
      date: "19-Jul-2019"
    });
    console.log("before save");
    let saveBlog = await blog.save(); //when fail its goes to catch
    console.log(saveBlog); //when success it print.
    console.log("saveBlog save");
  } catch (error) {
    console.log(error);
  }
});

2 个答案:

答案 0 :(得分:0)

Validation文档中,它说:

  

验证是中间件。猫鼬默认将验证注册为每个架构上的pre('save')钩子。

Save/Validate Hooks中,它说:

  

save()函数触发validate()钩子,因为猫鼬具有内置的pre('save')钩子,该钩子调用validate()。这意味着所有pre('validate')post('validate')挂钩都在任何pre('save')挂钩之前被调用。

因此它将在您的pre('save')钩子之前进行验证并给出错误,因为您未提供必填字段。您可以通过将pre('save')更改为pre('validate')来解决此问题。

编辑的沙箱:https://codesandbox.io/s/agitated-lederberg-rth1k

答案 1 :(得分:0)

在保存博客文档时,您没有传递id字段。

id由mongo自动生成,您无需指定它。 从BlogPost模式中删除ID。 但是,如果您想提供自己的ID,请传递一个唯一ID。

const BlogPost = new Schema({
  empid: String,
  date: Date
});