node.js - 多个猫鼬查询
问题描述
我正在使用 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)
});
});
我觉得我目前的方法效率很低,我想知道是否有有效的方法来实现这一目标。
解决方案
当然,这可以通过 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:您可能需要一些修改,因为我没有机会尝试代码。希望这可以帮助 :)
推荐阅读
- python - 仅访问数据框中的第二行列名
- javascript - 在 SCORM 包中获取课程进度的问题
- java - Java - 错误:无法找到或加载主类
- php - PHP如何删除重复或相等的数组值并将数据附加到数组中
- java - Java 中的扫描器数学问题:in.hasNext
- authentication - 升级后无法使用 admin/admin 登录 SonarQube
- google-sheets - 根据谷歌电子表格中相邻的 A 列值有条件地在 B 列中突出显示值
- excel - VBA 完成后移动工作表
- javascript - html画布中的撤消/重做功能
- bash - BASH - 进程状态