首页 > 解决方案 > 多个猫鼬查询

问题描述

我正在使用 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)
});

});

我觉得我目前的方法效率很低,我想知道是否有有效的方法来实现这一目标。

标签: node.jsmongoose

解决方案


当然,这可以通过 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:您可能需要一些修改,因为我没有机会尝试代码。希望这可以帮助 :)


推荐阅读