2017-05-03 47 views
0

這是我的app.all什麼正確的方式退出快遞app.all

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'所以我要當停止代碼:基本上,我打電話基礎上,建築ID /哈希fetchBuildings功能,然後根據響應設置titledescriptionimage發生。

我在這裏只是使用return,但我不知道這是否是傳統的做法。還有另一種更合適的方式嗎?

+0

您可以在'if'塊後面加上'else'塊。 – Rayon

回答

3

您應該總是返回響應,或者將請求傳遞給中間件鏈。如果你只是返回,請求會「卡住」:客戶端將繼續等待永不迴應的響應,並最終超時。

我們假設傳遞undefined的散列被認爲是無效的。你可以返回一個400(「錯誤的請求」)在這種情況下,響應:

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

如果要沿着傳遞請求,這將可能導致404(「未找到」)響應通過快速返回:

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

或者明確地傳遞一個錯誤,導致500(「內部服務器錯誤」)通過快速返回的響應:

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

您建議的所有選項都做同樣的事情。代碼停止,但沒有輸出。 – alex

+0

我以爲你的問題是如何正確「退出」快遞請求,這是我回答:) – robertklep