Node.js 尝试在express js路由中结束代码执行

Node.js 尝试在express js路由中结束代码执行,node.js,mongodb,express,routes,Node.js,Mongodb,Express,Routes,目前,我有一个简单的快速路线与nodejs。如果mongoDB查询中满足某个条件,我希望重定向用户并停止执行任何进一步的代码 有些事情我已经尝试过了: -返回 -决议结束() 下面是一个代码示例 router.post("/test", (req, res) => { Col.findOne({ 'val': req.body.val }) .then(val => { if (val) { // 1st attempt

目前,我有一个简单的快速路线与nodejs。如果mongoDB查询中满足某个条件,我希望重定向用户并停止执行任何进一步的代码

有些事情我已经尝试过了: -返回 -决议结束()

下面是一个代码示例

router.post("/test",  (req, res) => {
    Col.findOne({ 'val': req.body.val })
    .then(val => {
        if (val) {
            // 1st attempt
            return res.redirect("/testing");
            //2nd attempt
            res.redirect("/testing");
            res.end();
            // 3rd attempt
            res.redirect("/testing");
            return;
        }
    })
    console.log("Do NOT want this to execute but it does anyways");

}));
问题是在(if)语句中的代码执行并返回/res.end()之后,.then()之外的代码仍然执行

router.post(“/test”),异步(req,res)=>{
const val=wait Col.findOne({val:req.body.val});
if(val){
res.redirect(“/测试”);
}否则{
//其他代码在这里
}
}));

在mongoDB
上。如果根据给定的筛选查询未找到任何匹配文档,findOne
将返回
null
。如果是falsy值,则需要使用
else
块以退出执行(这里您实际上从DB获得了正确的响应,不是错误,但可能是falsy值
null
)。请添加
.catch()
块以查看是否有任何错误

router.post("/test", (req, res) => {
    Col.findOne({ 'val': req.body.val })
        .then(val => {
            if (val) {
                return res.redirect("/testing");
            } else {
                return res.send('No val found')
            }
        }).catch((err) => {
            console.log('In Err ::', err)
            return res.send('Some error occurred')
        })
})

我正在使用promises,另外我的问题是关于退出路由并完成代码执行,而不是关于mongodb Syntax正在执行什么代码?在这个例子中,除了Callback中没有其他代码,只是更新了代码,async不在路由中,我不理解我的错误。您有一个作为回调异步运行的异步函数。在这个路由上还有一个同步代码,你不想被执行。然后取下它。如果希望在
时执行此代码!!val===false
然后将其添加到
else
块。如果以异步方式运行某个程序,不要期望同步代码等待结果。请检查我更新的代码,它不再是异步函数。我在mongodb中使用承诺,而不是回调。它是否有效或仍然存在任何问题?除我的回答外,请根据需要尝试关闭DB连接。。