шлюз aws api и лямбда возвращают новый статус ошибки - PullRequest
0 голосов
/ 21 сентября 2018

Поэтому, когда вы создаете новую лямбду из scracth, вы получаете следующий встроенный код index.js по умолчанию:

exports.handler = async (event) => {
    // TODO implement
    const response = {
        statusCode: 200,
        body: JSON.stringify('Hello from Lambda!')
    };
    return response;
};

Эта лямбда используется конечной точкой шлюза API.Как правильно вернуть код ошибки, если что-то не так?Будет ли это обрабатывать шлюз или мне просто поменять статус выше на новый код ошибки?

enter image description here

1 Ответ

0 голосов
/ 21 сентября 2018
1xx (Informational): The request was received, continuing process
2xx (Successful): The request was successfully received, understood, and accepted
3xx (Redirection): Further action needs to be taken in order to complete the request
4xx (Client Error): The request contains bad syntax or cannot be fulfilled
5xx (Server Error): The server failed to fulfill an apparently valid request

Это просто возвращает ответ 200, который является успешным ответом.Вам просто нужно вернуть правильный код в зависимости от реализации.Я думаю, это то, что вы просите.

Для получения дополнительной информации о коде состояния вы можете прочитать эту вики https://en.wikipedia.org/wiki/List_of_HTTP_status_codes

Но так как вы спрашиваете о реализации, я бы сделал следующее

exports.handler = async (event) => {
    // TODO implement
    let statusCode = 200;
    let message = 'success';
    ... // do stuff
    statusCode = 400 // something went wrong
    const response = {
        statusCode: statusCode,
        body: JSON.stringify(message)
    };
    return response;
};

Все зависит от того, как вы хотите масштабировать свое приложение.Просто помните, никогда не дублируйте код.Держите его модульным.

Кроме того, вы также можете объявить это в функции

// Somewhere else
response = function (statusCode, message) {
    return {
     statusCode: statusCode,
     body: JSON.stringify(message)
    };
};

exports.handler = async (event) => {
    // TODO implement
    let statusCode = 200;
    let message = 'success';
    ... // do stuff
    statusCode = 400 // something went wrong

    return response(statusCode, message);
};

Проверьте шаблоны обработки ошибок в AWS.Это было бы хорошим началом, если вы уже не прочитали это.https://aws.amazon.com/blogs/compute/error-handling-patterns-in-amazon-api-gateway-and-aws-lambda/

По существу вам нужно что-то из следующего

exports.handler = (event, context, callback) => {
    var myErrorObj = {
        errorType : "InternalServerError",
        httpStatus : 500,
        requestId : context.awsRequestId,
        message : "An unknown error has occurred. Please try again."
    }
    callback(JSON.stringify(myErrorObj));
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...