在将我的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);
}
});
答案 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')
来解决此问题。
答案 1 :(得分:0)
id由mongo自动生成,您无需指定它。 从BlogPost模式中删除ID。 但是,如果您想提供自己的ID,请传递一个唯一ID。
const BlogPost = new Schema({
empid: String,
date: Date
});