3

koa アプリ用の認証ルーターの作成に行き詰まっています。

DB からデータを取得し、それをリクエストと比較するモジュールがあります。yield next認証が通った場合にのみ実行したい。

問題は、DB と通信するモジュールが promise を返し、yield nextその promise 内で実行しようとするとエラーが発生することです。または、厳密モードが使用されているかどうかによって異なりますSyntaxError: Unexpected strict mode reserved wordSyntaxError: Unexpected identifier

簡単な例を次に示します。

var authenticate = require('authenticate-signature');

// authRouter is an instance of koa-router
authRouter.get('*', function *(next) {
  var auth = authenticate(this.req);

  auth.then(function() {
    yield next;
  }, function() {
    throw new Error('Authentication failed');
  })
});
4

1 に答える 1

5

私はそれを理解したと思います。

promise が解決されるまで関数を一時停止し、続行する promise を生成する必要があります。

var authenticate = require('authenticate-signature');

// authRouter is an instance of koa-router
authRouter.get('*', function *(next) {
  var authPassed = false;

  yield authenticate(this.req).then(function() {
    authPassed = true;
  }, function() {
    throw new Error('Authentication failed');
  })

  if (authPassed)  {
   yield next;
  }
});

これは機能しているようですが、さらに問題が発生した場合はこれを更新します。

于 2015-12-21T21:40:28.657 に答える