2

Node Restify サービスに Bugsnag を追加しようとしています。すでにたくさんのルートがあるので、コード ベース全体に Bugsnag 呼び出しを追加しないようにしています。また、開発者がエラー レポートを追加するのを忘れるという間違いがないように、何かグローバルなことをしようとしています。

概念的には、とにかくres.send()ステータス コードを取得したいと考えています。statusCode が >=400 の場合、 を呼び出して Bugsnag に通知しBugsnag.notifyます。私はすでにどこでもエラーをチェックしているので、エラーはクライアント (ブラウザー、電話など) には表示されませんが、たとえば、送信さres.send(401, { message: 'You dont have permission to do that' })れます。どのルートなど。問題は、afterイベントをまったく発生させることができないことです:

server.on('after', function (req, res, route, error) {
  console.log('AFTER')
});

私は何afterのためにあるのか誤解していると思います。index.jsルートやその他のミドルウェア ( server.use) が定義される前の my の一番上にあります。

私の一般的なコード構造は次のようになります。

  server.post('/foo', function (req, res, next) {
    FooPolicy.create(req, function (err) {
      if (err) return res.send(err.code, err.data);
      FooController.create(req.params, function (response) {
        res.send(response.code, response.data)
        next();
      });
    });
  });

FooPolicy == 権限の確認
FooController == 実際にモデル/データを作成する

4

1 に答える 1

1

問題は、afterイベントが現在、他のハンドラーと同様に扱われていることです。つまりnext、すべてのコード パスで呼び出さないと、afterイベントが発行されないということです。

それまでの間、次の呼び出しを追加すると、afterイベント ハンドラーが起動します。

if (err) {
  res.send(err.code, err.data);
  next();
  return;
}
于 2016-02-10T16:26:14.117 に答える