在 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}
我们在 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}