0

我正在使用middy为我的 AWS lambda 代码处理中间件。下面是我的代码:

const middy = require('middy')
const middlewares = require('middy/middlewares')

const handlerWrapper = (handler) => middy((event, context, callback) => {
  context.callbackWaitsForEmptyEventLoop = false;
  let code = 200  
  context.send = (body) => callback(null,{
    statusCode: code,
    body: JSON.stringify(body)
  })

  context.status = (_code) => {
    code = _code
    return context
  }

  return handler(event, context ,callback)
}).use(middlewares.jsonBodyParser()).use(middlewares.cors())

问题是,我的前端正在发送一个名为的自定义标头authorizationv2,当我的前端尝试向我的 AWS lambda 代码发送请求时,浏览器将显示此错误

Access to XMLHttpRequest at 'https://apiv2.website.com/data/list/' from origin 'http://admin.website.com' has been blocked by CORS policy: Request header field authorizationv2 is not allowed by Access-Control-Allow-Headers in preflight response.

所以我假设要解决这个问题,我需要middy允许自定义标头authorizationv2。我不完全确定如何使用 middy。

4

1 回答 1

2

您需要在预检响应中添加自定义标头。有两种方法:

  • 如果您使用无服务器框架来部署资源,请在函数定义中添加自定义标头,如下所示:
    yourfunctionname:
    handler: path/to/handler
    events:
      - http:
          path: path/to/endpoint
          method: get
          cors:
            origin: "*"
            headers:
              - Content-Type
              - X-Amz-Date
              - Authorization
              - X-Api-Key
              - X-Amz-Security-Token
              - X-Amz-User-Agent
              - <your-custom-header-goes-here>
  • 手动方式:转到 AWS API Gateway 并找到您的 API 资源。单击“操作”->“启用 CORS”。在页面上,您可以在“Access-Control-Allow-Headers”字段中添加自定义标题。
于 2020-12-28T04:41:21.963 回答