12

うまくいけば、これは単純なものですが、ユーザーに 404 または 401 などを返し、他のハンドラーなどの伝播を停止したいカスタム ミドルウェアがいくつかあります。

私は次のようなことができると思っていました:

function SomeMiddleware(req, res, next) {
   if(user.notRealOrSomething)
   { throw new HttpException(401, "Tough luck buddy"); }

   return next();
}

ただし、これを行う最善の方法に関する特定の情報は見つかりません。

4

2 に答える 2

9

関数にエラーを渡すことを想定していnext()ます。

function SomeMiddleware(req, res, next) {
   if(user.notRealOrSomething) {
    return next(throw new HttpException(401, "Tough luck buddy")); 
   }

   next();
}

次のルートにスキップする引数を除いて、引数を渡すとnextエラーと見なされます。'route'

next がエラーで呼び出されると、エラー ミドルウェアが実行されます。

function (err, req, res, next) {
  // err === your HttpException
}

Express.js は、引数が 4 つのミドルウェアをエラー ミドルウェアとして扱います。

エラー処理ミドルウェアは、通常のミドルウェアと同じように定義されますが、署名 (err、req、res、next) であるアリティ 4 で定義する必要があります。

これはすべて、http: //expressjs.com/guide/error-handling.htmlで十分に文書化されています。

于 2013-08-02T17:53:52.037 に答える
2

応答オブジェクトの使用を妨げるものは何もありません:

res.send(401, "Tough luck buddy");
next('invalid user');
于 2014-01-31T20:00:24.387 に答える