首页 > 解决方案 > AWS CORs 在本地工作,但不是实时的(托管在 Netlify 上)

问题描述

它在本地运行良好,但是当我将它连接到Netlify时,出现了这个错误。

实际错误:

Access to XMLHttpRequest at 'https://uzk3crusd9.execute-api.us-east-2.amazonaws.com/production/contact' from origin 'https://seb-contact-form.netlify.app' has been blocked by CORS policy: Method PUT is not allowed by Access-Control-Allow-Methods in preflight response.

我的 lambda 函数:

const AWS = require('aws-sdk');
AWS.config.update({
  region: 'us-east-2'
});
const dynamodb = new AWS.DynamoDB.DocumentClient();
const dynamodbTableName = 'contact-form';
const contactPath = '/contact';

exports.handler = async function(event) {
  console.log('Request event: ', event);
  let response;
  switch(true) {
    case event.httpMethod === 'POST' && event.path === contactPath:
      response = await createContact(JSON.parse(event.body));
      break;
    default:
      response = buildResponse(404, '404 Not Found');
  }
  return response;
}


async function createContact(requestBody) {
  const params = {
    TableName: dynamodbTableName,
    Item: requestBody
  }
  return await dynamodb.put(params).promise().then(() => {
    const body = {
      Operation: 'SAVE',
      Message: 'SUCCESS',
      Item: requestBody
    }
    return buildResponse(200, body);
  }, (error) => {
    console.error('Oh no! Something went wrong...', error);
  })
}


function buildResponse(statusCode, body) {
  const response =  {
    statusCode,
    headers: {
      'Content-Type': 'application/json',
      "Access-Control-Allow-Headers" : "Content-Type,X-Amz-Date,Authorization,X-Api-Key,X-Amz-Security-Token",
      "Access-Control-Allow-Methods" : "OPTIONS,POST,PUT,PATCH",
      "Access-Control-Allow-Credentials" : true,
      "Access-Control-Allow-Origin" : "*",
      "X-Requested-With" : "*"
    },
    body: JSON.stringify(body)
  }

  return response; 
}

标签: javascriptamazon-web-servicesaws-lambdacors

解决方案


推荐阅读