我正在创建一个后钩创建一个鼻涕虫后,一个后已保存.当我try 使用Postman判断我的结果时,过程进入不确定状态(没有返回数据).
POST挂钩的代码:
PostsSchema.post("save", async function (doc, next) {
try {
doc.postSlug = slugify(doc.postTitle, { lower: true });
await doc.save();
return next();
} catch (err) {
console.log("inside catch method");
return next(createError(500, err.message));
}
});
我使用的路由代码:
module.exports.createPost = async (req, res, next) => {
const { postTitle, postContent, postAuthor } = req.body;
try {
// check if author exist
const authorExist = await AccountsModel.findById(postAuthor);
if (!authorExist) {
return next(createError(404, `Author ID: ${postAuthor} Not Found`));
}
// create post
console.log("route 1")
const postNew = new PostsModel({
postTitle: postTitle,
postContent: postContent,
postAuthor: postAuthor,
});
await postNew.save();
// populate data for return
let postCreated = await postNew.populate("postAuthor");
return res.status(200).json({
code: 1,
success: true,
message: "New Post Created",
data: postCreated,
});
} catch (error) {
return next(createError(500, error.message));
}
};
我确实通过删除doc.save()
前面的await
来解决这个问题:
PostsSchema.post("save", async function (doc, next) {
try {
doc.postSlug = slugify(doc.postTitle, { lower: true });
doc.save();
return next();
} catch (err) {
console.log("inside catch method");
return next(createError(500, err.message));
}
});
另外,使用.then()
也返回结果:
PostsSchema.post("save", async function (doc, next) {
doc.postSlug = slugify(doc.postTitle, { lower: true });
console.log(1);
doc
.save()
.then(() => {
console.log(2);
return next();
})
.catch((error) => {
return next(createError(500, err.message));
});
});
但发现了一些其他的帖子,什么已经等待和答案表明,这不是问题:
- How to properly make a Mongoose post hook async
- Mongoose post save hook , update the document
- Async function in mongoose pre save hook not working. prehook似乎与await一起工作得很好.
- https://stackoverflow.com/a/76738359/14723731.这个和我的一样,他们没有使用await方法
所以,我想知道是等待打破了这个过程还是别的什么?