エクスプレスerror-pagesの例を参照してください。原則として、まずアプリケーションルートを登録してから、ルートにマップされていない他のすべてのリクエストに対してcatch all 404ハンドラを登録します。最後に、500ハンドラが次のように登録されています。
// "app.router" positions our routes
// specifically above the middleware
// assigned below
app.use(app.router);
// Since this is the last non-error-handling
// middleware use()d, we assume 404, as nothing else
// responded.
app.use(function(req, res, next){
// the status option, or res.statusCode = 404
// are equivalent, however with the option we
// get the "status" local available as well
res.render('404', { status: 404, url: req.url });
});
// error-handling middleware, take the same form
// as regular middleware, however they require an
// arity of 4, aka the signature (err, req, res, next).
// when connect has an error, it will invoke ONLY error-handling
// middleware.
// If we were to next() here any remaining non-error-handling
// middleware would then be executed, or if we next(err) to
// continue passing the error, only error-handling middleware
// would remain being executed, however here
// we simply respond with an error page.
app.use(function(err, req, res, next){
// we may use properties of the error object
// here and next(err) appropriately, or if
// we possibly recovered from the error, simply next().
res.render('500', {
status: err.status || 500
, error: err
});
});
ええ、私はExpressの例を見てきたようです。しかし、これはとにかくとても役に立ちました。私は独自の500.ejsなどを作成しましたが、必要に応じてレンダリングしましたが、指定したときに私自身のエラーメッセージも追加できます。ありがとう。 – tuddy
404の処理でapp.use()を追加すると、何らかの理由でパブリックフォルダ内のすべてのルートが壊れてしまいます。 /stylesheets/style.cssのように、通常は私のejsテンプレートからアクセスされるので、突然失われてしまいます。これに対する提案はありますか? – netpoetica
ここに示した例の前にapp.use(static ....)を動かすだけで静的パスを壊すexpress app.use()ミドルウェアの問題を修正できました – netpoetica