我怎样才能让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') }) 

这对我有效。