这是我的app.all
。基本上,我根据建筑物ID /哈希调用fetchBuildings
函数,然后根据响应设置title
,description
和image
:
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
,但我想知道这是否是传统的做法。还有另外一个'适当的'方式是什么?
答案 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'));
}