我使用node和mongoose对我的mongodb运行查询。我运行了3个查询,如下所示:
router.put('/user/reset/password/:token',(request,response)=>{
let email = "";
if(!request.params.token){
return response.status(400).send("Request Parameter Is Missing")
}
if(!request.body){
return response.status(400).send("Request Body Is Missing")
}
AuthModel.findOne({
token:request.params.token,
}).then(document =>{
if(document === null){
return response.status(401).send("User Naot Found")
}
email = document.email;
let userModel ={
email:email,
password:request.body.password
}
UserModel.findOneAndUpdate({
email:email,
},userModel,{
new:true
}).then(document =>{
if(document === null){
return response.status(500).send("User not found")
}
AuthModel.findOneAndRemove({
email:email,
}).then(document =>{
if(document === null){
return response.status(500).send("User not found")
}
return response.status(200).send(document)
}).catch(error =>{
return response.status(500).json(error)
})
return response.status(200).send(document)
}).catch(error =>{
return response.status(500).json(error)
})
}) .catch(error =>{
response.status(500).send(error)
});});
我觉得我目前的方法相当低效,我想知道是否有有效的方法来实现这一点。
发布于 2019-07-04 18:23:11
当然,这可以通过async/await简化并使其更具可读性:
router.put('/user/reset/password/:token', async (request,response) => {
try {
if(!request.params.token) return response.status(400).send("Request Parameter Is Missing");
if(!request.body) return response.status(400).send("Request Body Is Missing");
const document = await AuthModel.findOne({token:request.params.token,});
if(!document) response.status(401).send("User Naot Found");
const { email } = document;
const userDocument = {
email,
password: request.body.password,
};
const updateRes = await UserModel.findOneAndUpdate({ email, }, userDocument, { new: true });
if(!updateRes) return response.status(401).send("User not found");
const removeRes = await AuthModel.findOneAndRemove({ email, });
if(!removeRes) return response.status(401).send("User not found");
return response.status(200).send(document);
} catch(error) {
return response.status(500).send(error);
}
});ps:你可能需要一些修改,因为我没有机会尝试代码。希望这能有所帮助:)
https://stackoverflow.com/questions/56860034
复制相似问题