首页 > 解决方案 > 无服务器 lambda 函数无法与 CORS 反应

问题描述

大家好,我已经使用 API 网关编写了一个无服务器 lambda API,当我使用 POSTMAN 时,该 API 可以正常工作。api 使用 PATCH 方法更新 dynamoDB 中的记录。然后我在我的 React 应用程序中实现了 axios 来调用我的 API。由于 CORS 正常,调用失败,我转到 API 网关并通过按下方法 PATCH 进入方法响应和集成方法为该端点启用了 CORS 添加了所有响应标头

Access-Control-Allow-Headers      
Access-Control-Allow-Origin   
Access-Control-Allow-Credentials      
Access-Control-Allow-Methods

部署了API并且不起作用。然后我尝试在我的 serverless.yml 中添加cors: true和部署这也不起作用。

这是我的鳕鱼:

无服务器.yml:

  setBookVotes:
handler: src/handlers/setBookVotes.handler
events:
  - http:
      method: PATCH
      path: /book/{id}/vote

反应:

    export const updateVoteCount = (id, vote) => {
  return axios.patch(`book/${id}`, {
    vote: vote,
  });
};

拉姆达:

import AWS from "aws-sdk";
import middy from "@middy/core";
import httpJsonBodyParser from "@middy/http-json-body-parser";
import httpEventNormalizer from "@middy/http-event-normalizer";
import httpErrorHandler from "@middy/http-event-normalizer";

const dynamodb = new AWS.DynamoDB.DocumentClient();

async function setBookVotes(event, context) {
  const { id } = event.pathParameters;
  const { vote } = event.body;

  const params = {
    TableName: process.env.BOOK_TABLE_NAME,
    Key: { id },
    UpdateExpression: "set vote = vote + :vote",
    ExpressionAttributeValues: {
      ":vote": vote,
    },
    ReturnValues: "ALL_NEW",
  };

  let updatedVotes;

  try {
    const result = await dynamodb.update(params).promise();
    updatedVotes = result.Attributes;
  } catch (error) {
    console.error(error);
    throw new createError.InternalServerError(error);
  }

  return {
    statusCode: 200,
    body: JSON.stringify(updatedVotes),
  };
}

export const handler = middy(setBookVotes)
  .use(httpJsonBodyParser())
  .use(httpEventNormalizer())
  .use(httpErrorHandler());

标签: reactjsamazon-web-servicesaxiosserverless-framework

解决方案


推荐阅读