54

現時点では、他のすべてのルートの下にある次のものがあります。

app.get('*', function(req, res){
  console.log('404ing');
  res.render('404');
});

そしてログによると、ルートが上記で一致している場合でも発火しています。何も一致しない場合にのみ発火させるにはどうすればよいですか?

4

7 に答える 7

83

すべてのルートの最後に配置する必要があります。

ルートコントロールの受け渡しの2番目の例を見てください。

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);
    }
});

エラー処理に記載されています。

于 2012-07-16T08:05:09.460 に答える
11

あなたのブラウザはファビコンのリクエストをフォローアップしていると思います. そのため、要求されたページで 200 が成功した後、ログに 404 が表示されます。

ファビコン ルートを設定します。

于 2013-05-10T21:43:35.477 に答える
1

これを使用できます

const express = require('express');
const app=express();
app.set('view engine', 'pug');
app.get('/', (req,res,next)=>{
    res.render('home');
});
app.use( (req,res,next)=>{
    res.render('404');
})
app.listen(3000);
于 2021-04-20T18:08:24.457 に答える