能否在Serverless.yml文件中配置API Gateway的Stage变量?
正确配置API Gateway Stage变量的方式
你之前把变量放在provider.variables下是错误的,这个是Serverless框架自身的全局变量,不会同步到API Gateway的Stage变量中,所以代码里无法通过event.stageVariables获取到。下面是几种可行的正确配置方法:
1. 全局配置所有API的Stage变量
直接在provider字段下添加stageVariables,所有该服务部署的API都会继承这个变量:
service: test-project provider: name: aws runtime: nodejs18.x region: us-east-2 stageVariables: requestType: 'API' # 正确的配置位置 functions: testFunction: handler: index.handler events: - http: path: /{proxy+} method: ANY
2. 针对单个HTTP事件配置
如果只想给特定的HTTP接口设置Stage变量,可以在对应的http事件内配置:
service: test-project provider: name: aws runtime: nodejs18.x region: us-east-2 functions: testFunction: handler: index.handler events: - http: path: /{proxy+} method: ANY stageVariables: requestType: 'API'
3. 分环境配置不同变量
如果需要给开发、生产等不同环境设置不同的requestType,可以结合自定义配置和框架的stage变量实现:
service: test-project provider: name: aws runtime: nodejs18.x region: us-east-2 stage: ${opt:stage, 'dev'} # 默认使用dev环境 custom: stageConfigs: dev: requestType: 'API' prod: requestType: 'SOCKET' # 动态读取对应环境的变量 provider: stageVariables: requestType: ${self:custom.stageConfigs.${self:provider.stage}.requestType} functions: testFunction: handler: index.handler events: - http: path: /{proxy+} method: ANY
部署完成后,你可以前往AWS控制台的API Gateway对应Stage页面,查看「Stage Variables」确认requestType是否配置成功,此时代码里就能通过event.stageVariables.requestType正常获取到值了。
内容的提问来源于stack exchange,提问作者Avinash
相关产品推荐
相关产品推荐

