我怎样才能让Express.js到404只在缺less路线?
目前我有以下所有我的其他路线:
app.get('*', function(req, res){ console.log('404ing'); res.render('404'); });
而且根据日志,即使路线与上面相匹配,也会被解雇。 我怎样才能让它只有在什么都没有匹配的时候才会被触发?
你只需要把它放在所有路线的末尾。
看看路由控制的第二个例子:
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中有logging 。
我敢打赌,您的浏览器正在跟进对favicon的请求。 这就是为什么您在所请求的页面200次成功之后在日志中看到404。
设置一个favicon路线。
我想要一个捕获所有这些只会在缺less的路线上呈现我的404页面,并在error handling文档中find它。https://expressjs.com/zh/guide/error-handling.html
app.use(function (err, req, res, next) { console.error(err.stack) res.status(404).render('404.ejs') })
这对我有效。