目前,我所有其他路由的下方都有以下内容:
app.get('*', function(req, res){
console.log('404ing');
res.render('404');
});
根据日志(log),即使在上面匹配了路由,它也会被触发.我怎样才能让它在没有匹配的情况下才开火?
目前,我所有其他路由的下方都有以下内容:
app.get('*', function(req, res){
console.log('404ing');
res.render('404');
});
根据日志(log),即使在上面匹配了路由,它也会被触发.我怎样才能让它在没有匹配的情况下才开火?
你只需要把它放在所有路由的尽头.
看看Passing Route Control的第二个例子:
var express = require('express')
, app = express.createServer();
var users = [{ name: 'tj' }];
app.all('/user/:id/:op?', function(req, res, next){
req.user = users[req.params.id];
if (req.user) {
next();
} else {
next(new Error('cannot find user ' + req.params.id));
}
});
app.get('/user/:id', function(req, res){
res.send('viewing ' + req.user.name);
});
app.get('/user/:id/edit', function(req, res){
res.send('editing ' + req.user.name);
});
app.put('/user/:id', function(req, res){
res.send('updating ' + req.user.name);
});
app.get('*', function(req, res){
res.send('what???', 404);
});
app.listen(3000);
或者,您什么也不能做,因为所有不匹配的路由都将生成404.然后可以使用以下代码显示正确的模板:
app.error(function(err, req, res, next){
if (err instanceof NotFound) {
res.render('404.jade');
} else {
next(err);
}
});
记录在Error Handling页.