2016-02-12 48 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'); 
     } 
    }); 

将您的文件名保存在数组中,并立即调用它。