GCP API Gateway PUT/DELETE请求404错误 无法传递路径参数至Cloud Functions
问题修复方案
问题根源
404错误由两个配置错误共同导致:
- API Gateway路径转发逻辑不匹配
- Express路由参数语法错误
具体修复步骤
第一步:修正API Gateway配置的路径转发规则
你当前使用的path_translation: APPEND_PATH_TO_ADDRESS会把API Gateway的完整请求路径直接追加到Cloud Functions地址后面。当你访问API网关的PUT /users/1时,实际转发到Cloud Functions的路径是/cpd_user/users/1,而你的函数只监听/{user_id}路径,自然返回404。
两种修正方案二选一即可:
方案A:修改path_translation策略(更简单)
把/users/{user_id}下PUT/DELETE配置里的path_translation改为CONSTANT_ADDRESS,同时把后端地址带上路径参数占位符:
x-google-backend: address: https://asia-southeast2-project-id.cloudfunctions.net/cpd_user/{user_id} path_translation: CONSTANT_ADDRESS
方案B:保留APPEND_PATH_TO_ADDRESS,调整Express路由前缀
如果你想保留路径追加策略,就把Express的路由前缀加上/users,适配转发过来的路径。
第二步:修正Express路由的参数语法
Express的路径参数是用冒号:开头,不是大括号包裹,你现在的写法匹配不到任何带参数的请求:
把原来的:
app.delete('/{user_id}', _utils.jwtFilter, UserController.deleteUserAction); app.put('/{user_id}', _utils.jwtFilter, UserController.updateUserAction);
修改为:
app.delete('/:user_id', _utils.jwtFilter, UserController.deleteUserAction); app.put('/:user_id', _utils.jwtFilter, UserController.updateUserAction);
如果选了上面的方案B,就改成:
app.delete('/users/:user_id', _utils.jwtFilter, UserController.deleteUserAction); app.put('/users/:user_id', _utils.jwtFilter, UserController.updateUserAction);
第三步:重新部署验证
修改完配置后,重新部署API Gateway和Cloud Functions,再调用网关地址即可正常匹配路由。
内容的提问来源于stack exchange,提问作者Praditha
相关产品推荐
相关产品推荐

