0

ネームラムダでネイティブプロミスを使用してエラー処理を行っています。何らかの理由で、私のpromise.rejectがトリガーされません。私は特に失敗するために悪いURLを送信していますが、AWSは502 "Bad Gateway"を送り返しています。これはおそらくAWSが内部のサーバの問題を処理する方法ですが、これは問題ありませんが、拒否理由を返送したいと思います。私は間違って何をしていますか?ノードプロミスとAWSラムダエラー処理

約束

function parseData(data) { 
    url = 'https://notarealurl'; 

    return new Promise((resolve, reject) => { 
     https.get(url, (res) => { 
      let body = ''; 
      res.on('data', (chunk) => { 
       body += chunk; 
      }) 
      .on('end',() => { 
       resolve(body); 
      }) 
      //this reject will trigger when there is an error with the request 
      .on('error', (err) => { 
       const rejectReason = { 
        statusCode: 500, 
        body: 'Internal Server Error: ' + err 
       }; 
       reject(rejectReason) 
      }); 
     }) 
    }); 
} 

私のハンドラ:

function handler(event, context) { 
    parseData(event.queryStringParameters) 
    .then((result) => { 
     const parsed = JSON.parse(result); 
     //handle error message returned in response 
     if (parsed.error) { 
      const oAuthError = 'Authentication Error'; 
      let error = { 
       headers: {"Content-Type": "application/json"}, 
       body: JSON.stringify(parsed.error) 
      }; 
      if(parsed.error.type === oAuthError) { 
       error.statusCode = 401; 
       context.succeed(error); 
      } else { 
       error.statusCode = 404; 
       return context.succeed(error); 
      } 
     } else { 
      return context.succeed({ 
       statusCode: 302, 
       headers: "Success" 
       }); 
     } 
    }) 
    .catch((reason) => { 
     console.log('Promise rejected!!!!', reason) 
    }) 
} 

AWSのエラーではなく、私のpromise.reject errorReasonから出て来ていますか?

+0

401と404の場合は、context.successではなくcontext.failを使用してください。 – notionquest

+0

@notionquest context.failを返すと、API Gatewayはサーバーで何か問題が発生したと解釈し、502をスローします。要求は成功しましたが、応答にエラーが含まれていたため、前の質問: http://stackoverflow.com/questions/42847945/aws-api-gateway-error-response-generates-502-bad-gateway/42848230#42848230 – jmcgui05

答えて

0

私は私の問題を理解しました。私はゲットの中に自分の.on( 'エラー')を持っていました。次のコードに変更されました:

function parseData(data) { 
    url = 'https://notarealurl'; 

    return new Promise((resolve, reject) => { 
     https.get(url, (res) => { 
      let body = ''; 
      res.on('data', (chunk) => { 
       body += chunk; 
      }) 
      .on('end',() => { 
       resolve(body); 
      }) 
      //this reject will trigger when there is an error with the request 
     }) 
     .on('error', (err) => { 
       const rejectReason = { 
        statusCode: 500, 
        body: 'Internal Server Error: ' + err 
       }; 
       reject(rejectReason) 
      }); 
    }); 
} 
関連する問題