在快速路由的请求处理程序中返回值是否可以执行任何操作?

时间:2017-08-28 14:13:33

标签: javascript express

问题很简单:在快速路线的请求处理程序中返回值是否可以做任何事情?

我看到人们返回请求处理程序的响应:

route.get('/something', (req, res) => {
  // blah blah

  if (/* something */) {
    return res.send('something'); // return on the same line
  }

  return res.send('something else');
});

我看到人们在发送回复后提前回复:

route.get('/something', (req, res) => {
  if (/* something */) {
    res.send('something');
    return; // return after
  }

  res.send('something else');
  return;
});

有什么不同吗?返回的值是否完全使用?

2 个答案:

答案 0 :(得分:2)

快递路线不会对返回值执行任何操作。

当你看到类似的东西时:

return res.send(...);

这只是一个简写:

res.send(...);
return;

Express中发生的事情没有区别。在这种情况下,返回仅用作流量控制(退出函数),而不是因为有人想要返回一个值,因此其中任何一个都具有完全相同的行为。

我个人更喜欢第二种形式,因为第一种形式可以被读取代码的人解释为暗示那里的返回值可能有意义(即使没有)。

答案 1 :(得分:1)

要添加到上面,返回值可能对单元测试有用。您可以返回一个可以在测试框架中检查的值,而不必在模块或类的基本测试中使用诸如supertest之类的东西。