2016-02-12 62 views
4

一些看法和404人,這是我的路由設置:渲染express.js

app.get('*', getJSON); 

app.get('/', [list, render]); 
app.get('/questions', [list, render]); 
app.get('/ask', [ask, render]); 

app.get('/:questionId(\\d+)', [question, render]); 
app.get('/:questionId(\\d+)/:slug', [question, render]); 

app.get('/sitemap.xml', clone); 
app.get('/feed/qa.rss', clone); 

app.post('/rest/1/:object/:method', [post, render]); 
app.all('*', function(req, res){ 
    res.send(404).status('Page not found'); 
}); 

正如你可以看到,幾乎所有的路線與運行的渲染功能結束。我想在開始時使用與getJSON相同的模式,但最後。簡單的方式做,這將是在末尾添加

app.all('*', render); 

,但我不能,因爲我想跳過的sitemap.xml和qa.rss,和所有的路徑未在此處指定,像/foo

這怎麼辦?

回答

0

創建一箇中間件它那裏顯示的例子。 Somelike這樣的:

/middlewares/error.js

exports.notFound = function(req, res, next) { 
    res.status(404); 
    res.render('not-found'); // localized in /views/not-found.ejs or .html 
}; 

// for regex error 
exports.serverError = function(error, req, res, next) { 
    res.status(500); 
    res.render('server-error', {error: error}); 
}; 

或者:

app.error(function(err, req, res, next){ 
    if (err instanceof NotFound) { 
     res.render('404.jade'); 
    } else if (err instanceof ServerError){ // for regex error 
     res.render('server-error.jade', {error: err}); 
    } else { 
     next(err); 
    } 
}); 

Error handling

+0

我應該如何處理sitemap.xml和qa.rss,regex exeption? – Himmators

+0

更新了答案 –

0

記錄在案,您可以撥打路由器sitemap.xml的文件或其他文件:

app.get('/sitemap.xml', function(req, res) { 
    app.use(function (err, xml) { 
     if (err) { 
     res.status(400); 
     res.render('404.jade'); 
     } 
    }); 

將您的文件名保存在數組中,並立即調用它。