是否有一个更好的解决方案来检查两个集合,然后保存一个引用,但如果出现问题,删除你已经创建的一个
在这段代码中,我想检查集合中是否存在一个电子邮件,而另一个中是否存在一个通道名。接下来,保存一个用户帐户,然后创建一个引用用户帐户的用户通道,但是如果发生了什么,则删除一个用户帐户并向客户机返回一个错误。
let error = {}
await userSchema.findOne({email:body.email},(err, doc) =>
{
if(err){
return console.log(err)
}
if(doc){
error.email = `Email ${data.email} already used!`
}
})
await channelSchema.findOne({channelname:body.channelname},(err, doc) =>
{
if(err){
return console.log(err)
}
if(doc){
error.channelname = `Channel name ${data.channelname} already used!`
}
})
if(error !== {}) {
return res.status(400).json(error)
}else{
const newUser = new userSchema({
email:body.email,
password: data.password
})
const newProfile = new channelSchema({
owner:newUser.id,
channelname: body.channelname
})
不要将.then .catch
与await一起使用,而是将async/await
与try/cathc
一起使用。
try {
let error = {};
let user = await userSchema.findOne({ email: body.email });
if (user) {
error.email = `Email ${data.email} already used!`;
return res.status(400).json(error);
}
let channel = await channelSchema.findOne({ channelname: body.channelname });
if (channel) {
error.channelname = `Channel name ${data.channelname} already used!`;
return res.status(400).json(error);
}
const newUser = new userSchema({
email: body.email,
password: data.password,
});
const newProfile = new channelSchema({
owner: newUser.id,
channelname: body.channelname,
});
} catch (error) {
return console.log(err);
}