在 serverless.yml 中跨函数共享 CORS 配置

Share CORS configuration across functions in serverless.yml

我们在 serverless.yml 中设置了一堆 API 需要支持 CORS 的端点。

此配置有效:

functions:
  function1:
    handler: api.refresh
    events:
      - http:
          path: function1
          method: post
          cors:
            origin: '*'
            headers:
              - Content-Type
              - X-Amz-Date
              - Authorization
              - X-Api-Key
              - X-Amz-Security-Token
              - X-Amz-User-Agent

但这意味着我们需要为每个函数复制我们自定义 CORS header 的列表——一旦我们添加一个新的 header,我们可能需要更新几十个地方。

我们如何指定一次允许的 CORS headers 并将它们应用于所有函数?理想情况下,我们还可以自动让所有函数同时启用 CORS。

目前serverlessjs不支持一次为所有函数设置cors,你必须为每个函数事件启用cors。

在正常情况下,您只需定义一次 cors 设置并将其应用于函数(如变量)

# ...
custom:
  defaultCors:
    origin: "*"
    headers:
      - Content-Type
      - X-Amz-Date
      - Authorization
      - X-Api-Key
      - X-Amz-Security-Token
      - X-Amz-User-Agent
# ...
functions:
  function1:
    handler: api.refresh
    events:
      - http:
          path: function1
          method: post
          cors: ${self:custom.defaultCors}