退出Express app.all的正确方法是什么

时间:2017-05-03 09:42:26

标签: javascript express

这是我的app.all。基本上,我根据建筑物ID /哈希调用fetchBuildings函数,然后根据响应设置titledescriptionimage

app.all('/:id', function (req, res) {
  const hash = req.params.id
  const obj = {}
  if (hash === 'undefined') {
    obj.title = 'iStaging LiveTour'
    obj.description = ''
    obj.image = 'https://raw.githubusercontent.com/alexcheninfo/vue-tmux-example/master/app/istaging.jpg'
    return
  }
  fetchBuildingsByHash(hash).then(({title, description, image, isBasicPlan}) => {
    if (isBasicPlan) {
      obj.title = 'iStaging LiveTour'
      obj.description = ''
      obj.image = 'https://raw.githubusercontent.com/alexcheninfo/vue-tmux-example/master/app/istaging.jpg'
    } else {
      obj.title = title || 'iStaging LiveTour'
      obj.description = description || ''
      obj.image = image || 'https://raw.githubusercontent.com/alexcheninfo/vue-tmux-example/master/app/istaging.jpg'
    }
    res.render('index.ejs', obj)
  }).catch((err) => {
    const obj = {
      title: 'notFound'
    }
    res.render('404.ejs', obj)
  })
});

有时hash'undefined'所以我想在发生这种情况时停止代码。

我在这里只使用return,但我想知道这是否是传统的做法。还有另外一个'适当的'方式是什么?

1 个答案:

答案 0 :(得分:3)

您应始终返回响应,或者沿中间件链传递请求。如果您刚刚返回,请求将“卡住”:客户端将继续等待永不响应的响应,最终会超时。

我们假设传递undefined的哈希被视为无效。在这种情况下,您可以返回400(“错误请求”)响应:

if (hash === 'undefined') {
  return res.sendStatus(400);
}

如果您要传递请求,这可能会导致Express返回404(“Not Found”)响应:

app.all('/:id', function (req, res, next) {
  const hash = req.params.id
  const obj = {}
  if (hash === 'undefined') {
    return next();
  }
  ...
})

或明确传递错误,导致Express返回500(“内部服务器错误”)响应:

if (hash === 'undefined') {
  return next(Error('invalid hash'));
}