Node.js 尝试在express js路由中结束代码执行
目前,我有一个简单的快速路线与nodejs。如果mongoDB查询中满足某个条件,我希望重定向用户并停止执行任何进一步的代码 有些事情我已经尝试过了: -返回 -决议结束() 下面是一个代码示例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
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连接。。