Как я могу перенаправить URL для пост-запроса с помощью AWS lambda? - PullRequest
0 голосов
/ 03 октября 2019

Эти результаты относятся к ответам на запросы GET и POST через шлюз API и лямбду. использовал ту же лямбда-функцию, но когда я использовал пост-метод API-шлюза, ответ просто показывает мне JSON. что я должен сделать?

когда я использовал post req

когда я использовал get req это моя лямбда-функция

exports.handler = (event, context, callback) => {
   const response = {
    statusCode: 301,
    headers: {
      Location: 'https://google.com',
    }
  };

  return callback(null, response);
}

спасибо.

Ответы [ 2 ]

0 голосов
/ 06 октября 2019

Я обычно использую новый шаблон async/await при определении своих лямбда-символов aws:

exports.handler = async (event) => {
 // do stuff...
}

вам обычно не требуется context, если вы не хотите использовать некоторую информацию, касающуюся aws, касающуюся вашеголямбда. У меня есть вспомогательная функция, которая многократно используется внутри базы кода

function proxyResponse(inBody, inStatusCode = null, headers = {}, event = null) {
  if (!isApiGateway(event)) {
    if (inBody instanceof Error) {
      throw inBody;
    }
    return inBody;
  }
  let statusCode = inStatusCode;

  let body;
  if (inBody instanceof Error) {
    statusCode = statusCode || INTERNAL_SERVER_ERROR;
    body = JSON.stringify({
      message: inBody.message,
      code: statusCode,
    });
  } else if (inBody instanceof Object) {
    body = JSON.stringify(inBody);
  } else {
    body = inBody;
  }

  const [origin] = event ? caseHandler(event.headers, 'origin') : [];

  return {
    statusCode: statusCode || 200,
    body,
    headers: Object.assign({
      'Access-Control-Allow-Headers': 'Content-Type,Authorization,X-Amz-Date,X-Api-Key,X-Amz-Security-Token,x-api-key,Authorization',
      'Access-Control-Allow-Origin': origin,
      'Access-Control-Allow-Credentials': true,
      'Access-Control-Allow-Methods': 'DELETE,GET,HEAD,OPTIONS,PATCH,POST,PUT',
    }, headers),
  };
}

и еще одна:

function caseHandler(mixedCaseObject, inputKey) {
  if (!mixedCaseObject || !inputKey) {
    return [];
  }
  return Object.keys(mixedCaseObject)
    .filter((key => key.toLowerCase() === inputKey.toLowerCase()))
    .map(key => mixedCaseObject[key]);
}

и эта:

function isApiGateway(event) {
  return (!!event.httpMethod && !!event.headers && !!event.requestContext);
}

поэтому внутри лямбды всякий раз, когда я хочу что-то вернуть, я использую следующие вспомогательные функции:

module.exports.handler = async (event) => {
  try{
 // do stuff...
 return proxyResponse(YOUR_CUSTOM_BODY_OBJECT, Api.HTTP.OK, {}, event);
 } catch(error) {
 return proxyResponse(error, Api.HTTP.INTERNAL_SERVER_ERROR, {}, event);
 }
}
0 голосов
/ 03 октября 2019

Запрос GET вернет любой контент, указанный в ответе. В данном случае это объект JSON response . Для запросов POST тот же объект response возвращается обратно в шлюз API, который затем возвращает его обратно как есть клиенту.

Возможно, здесь может помочь документация https://docs.aws.amazon.com/en_pv/apigateway/latest/developerguide/api-gateway-integration-settings-integration-response.html

...