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から出て来ていますか?
401と404の場合は、context.successではなくcontext.failを使用してください。 – notionquest
@notionquest context.failを返すと、API Gatewayはサーバーで何か問題が発生したと解釈し、502をスローします。要求は成功しましたが、応答にエラーが含まれていたため、前の質問: http://stackoverflow.com/questions/42847945/aws-api-gateway-error-response-generates-502-bad-gateway/42848230#42848230 – jmcgui05