提问人:Fun Strike 提问时间:10/21/2022 更新时间:10/21/2022 访问量:22
我在构建猫鼬方法时遇到问题
I have problem structuring mongoose methods
问:
我在猫鼬中使用回调函数时遇到问题。
Client.findOne({remarks}, (error, docs) => {
if(error){
//logging error to DB
return next(error)
}
if(docs){
return next(new ErrorResponse(IdenticalRemarksError, 400))
}
})
Client.create(
{ fullname, email, telephone, country, city, remarks },
(error, docs) => {
if(error){
return next(error)
}
res.status(201).json({
success: true,
data: docs
})
}
);
Client.findOne() 回调中的返回不会结束整个寄存器控制器,即 Client.create() 仍然运行。我知道这是因为返回是 Client.findOne() 的本地返回值。
重组它的最佳方式是什么,使 Client.findOne() 中 if(docs){} 中的 return 语句将结束整个控制器函数而不会引发 async await?即如果在 findOne() 方法中找到备注,则不会创建客户端?
答:
0赞
Drashti Kheni
10/21/2022
#1
尝试使用以下代码后:
Client.findOne({ remarks }, (error, docs) => {
if (error) {
//logging error to DB
return next(error);
}
if (docs) {
return next(new ErrorResponse(IdenticalRemarksError, 400));
}
Client.create(
{ fullname, email, telephone, country, city, remarks },
(error, docs) => {
if (error) {
return next(error);
}
res.status(201).json({
success: true,
data: docs
})
}
);
});
评论
0赞
Fun Strike
10/21/2022
这是我曾经写的,我想按照猫鼬文档去
1赞
NeNaD
10/21/2022
#2
解决方案 1
你可以把 part 放在 的回调中,如果没有错误,则执行它。Client.create()
Client.findOne()
解决方案 2
不要使用回调,而是使用回调,这将使您的代码更具可读性。async/await
注意:我知道你写了你不想要的,但我把它添加为第二个解决方案,以便您可以比较代码的可读性。async/await
const someFunction = async (req, res, next) => {
try {
const client = await Client.findOne({ remarks });
if(client) return res.status(400).json({ success: false });
const new_client = await Client.create({ fullname, email, telephone, country, city, remarks });
return res.status(200).json({ success: true, client: new_client });
} catch (error) {
return res.status(400).json({ success: false });
}
}
评论