中间件内部的return语句是一种好习惯吗?

时间:2019-06-12 07:49:26

标签: javascript node.js express

我正在开发REST API应用程序。每当我想处理API路由时,通常(如果不是总是)我都必须放置嵌套的if-elsetry-catch块来检查错误请求,数据库查询失败,资源不存在,重复项,等等。这使我的代码难以阅读和维护。

我试图通过使用async/await结构来最小化回调,但是我在路由中间件中的代码似乎总是具有至少2-3个缩进级别。我想找到一种使函数嵌套更少的方法。

例如,我具有以下中间件功能:

router.post('/', async (req, res, next) => {
  if (!error1) {
    try {
      const success = await doSomething();

      if (success) {
        const someString = await doSomethingElse();
        if (someString === 'someValue') {
          // **SUCCESSFUL RESPONSE HERE**
        } else {
          // send some error response
        }
      } else {
        // send some error response
      }
    } catch (error2) {
      // send some error response
    }
  } else {
    // send some error response
  }
});

我认为我可以做这样的事情,一旦出现错误,这将使函数的流程短路。

router.post('/', async (req, res, next) => {
  if (error1) {
    // send some error response
    return;
  }

  try {
    const success = await doSomething();

    if (!success) {
      // send some error response
      return;
    }

    const someString = await doSomethingElse();

    if (someString !== 'someValue') {
      // send some error response
      return;
    }

    // **SUCCESSFUL RESPONSE HERE**
  } catch (error2) {
    // send some error response
  }
});

我的问题是:

  1. 中间件内部的return语句是一个好主意/好习惯吗?
  2. 无论如何我return;return someValue;会发生什么? Express是否需要额外的处理资源来处理返回的值并尝试以某种方式解决它?
  3. 在这种情况下,您会建议使用哪种类型的错误处理(代码段1或代码段2)?

0 个答案:

没有答案