【问题标题】:Trying to end code execution in an express js route试图在快速 js 路由中结束代码执行
【发布时间】:2020-04-06 07:07:37
【问题描述】:

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

我已经尝试过的一些事情: - 返回 - res.end()

下面是代码示例

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()之外的代码仍然执行

【问题讨论】:

  • 它是否有效或仍有任何问题?另外,除了我的回答,请尝试根据需要关闭数据库连接..

标签: node.js mongodb express routes


【解决方案1】:

在 mongoDB 上,.findOne 将返回 null,如果它没有根据给定的过滤查询找到任何匹配的文档。如果出现虚假值,那么您需要有 else 块才能退出执行(这里实际上您从 DB 得到了正确的响应,而不是错误 - 但它可能是虚假值 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')
        })
})

【讨论】:

    【解决方案2】:

    Using Async/await in Express

    router.post("/test", async (req, res) => {
      const val = await Col.findOne({val: req.body.val});
      if (val) {
        res.redirect("/testing");
      } else {
        // other code goes here
      }
    }));
    

    【讨论】:

    • 我正在使用 Promise,另外我的问题是关于退出路由和完成代码执行,而不是关于 mongodb 语法
    • 正在执行什么代码?在示例中,除了回调之外没有其他代码
    • 刚刚更新了代码,异步不在路由中,反正我的错误
    • 我不明白。您有一个异步函数作为回调异步运行。而且你在这条路线上还有一个你不想被执行的同步代码。然后将其删除。如果您希望此代码在 !!val === false 时执行,请将其添加到 else 块中。如果你异步运行某些东西,不要指望同步代码等待结果。
    • 请检查我更新的代码,它不再是一个异步函数。我在 mongodb 中使用 Promise,而不是回调。
    猜你喜欢
    • 1970-01-01
    • 2016-06-11
    • 2013-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-16
    相关资源
    最近更新 更多