0

こんにちは、私は最初の Node.js アプリケーションを開発しています。最初の問題は本当に基本的なものでした。HTTP エラー (404、500、...) をキャッチできません。

私はドキュメントに従いました(そう思います)が、何かが足りないと思います。

これは私のコードです:

var express = require('express')
app = express()
app.use(express.logger('dev'));

app.get('/', function(req, res) {
    res.send('Hellow World!!!')
})
app.use(app.router);
app.use(function(err, req, res, next) {
    console.error('Oh!! ERROR');
    console.error('My ERROR: ' + JSON.stringify(err));
});

app.listen(3000);
console.log('Server running at http://127.0.0.1:3000/');

前もって感謝します。

4

1 に答える 1

2

したがって、Expressが機能する方法は、ミドルウェアとルートハンドラーのスタック全体の最後に到達し、まだ何も応答していない場合、エラーを発生させることなくフォールバック404応答を自動的に送信します。これが、エラー処理ミドルウェアが呼び出されない理由です。デフォルトでは、expressは404をエラーとは見なしません。これは、おそらく正しい考え方です。

これをカスタマイズしたい場合は、スタックの最後にミドルウェアを配置して、カスタム404ページを直接提供するか、必要に応じnextてエラーで呼び出すことができます。

app.get('/'...
app.get('/two'...
app.get(/'three'...

app.use(middleware1...
app.use(middleware2...
app.use(app.router);
app.use(function (req, res, next) {
    //Option 1: respond here
    return res.status(404).render('my_404_view');
    //Option 2: trigger error handler
    return next(new Error('404ed!'));
}

オプション2は、エラー処理ミドルウェアをトリガーします。そこで、エラーオブジェクトから情報を取得して、レンダリングするビューと送信するステータスコードを決定する必要があります。errors.NotFound私は個人的に404コードを持つクラスを定義し、わかりやすい404ページビューをレンダリングできるようにします。

于 2013-01-18T21:32:39.517 に答える