簡體   English   中英

如何使用 AWS lambda 重定向 URL 以進行發布請求?

[英]How can I redirect a URL for post request using AWS lambda?

這些結果適用於通過 API 網關和 lambda 響應的 GET 和 POST 請求。 使用相同的 lambda function,但是當我使用 API 網關的 post 方法時,響應只顯示我 Z0ECD11C1D7A2BD787A20ECD11C1D7A2BD774A2 我該怎么辦?

當我使用 post req

當我使用 get req時,它是我的 lambda function

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

  return callback(null, response);
}

謝謝你。

在定義我的 aws lambda 時,我通常使用新的async/await模式:

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

你通常不需要context ,除非你想使用一些關於你的 lambda 的 aws 相關信息。 我有一個助手 function 在代碼庫中被重用了很多

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);
}

所以在 lambda 中,每當我想返回一些東西時,我都會使用這個輔助函數:

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);
 }
}

GET 請求將返回響應中提供的任何內容。 在這種情況下,它是 JSON object響應 對於 POST 請求,相同的響應object 將返回到 API 網關,然后將其按原樣返回給客戶端。

也許這里的文檔可能會有所幫助

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM