我已经设置了一个带有各种路线的快速应用程序,例如:
- /api/route1
- /api/route2
- /api/newroute
- ...
我需要将对路由 /api/route2 的请求重定向到 /api/newroute。因此我使用 res.redirect(); 来实现这一点。它在我的本地开发环境中运行良好,该应用程序托管在http://localhost/api上。 。请求http://localhost/api/route2成功重定向到http://localhost/api/newroute 。
我们现在已经使用aws-serverless-express在无服务器/lambda容器中部署了express应用程序。该应用程序由 AWS 托管于 https://xxx.execute-api.us-east-1.amazonaws.com/production/api .
如果请求:
https://xxx.execute-api.us-east-1.amazonaws.com/production/api/route2
它被重定向到:
https://xxx.execute-api.us-east-1.amazonaws.com/api/newroute 。
重定向失败,因为正确的端点现在应该是 /product/api/newroute。
我想避免在 res.redirect() 中硬编码中缀“/product”;因为它会因环境而异。
因此我检查了是否
- req.originalUrl
- req.baseUrl
- 请求路径
将提供中缀“/生产”,但事实并非如此。
此外,req.get('Host') 不提供“/product”,因为它返回 https://xxx.execute-api.us-east-1.amazonaws.com .
是否还有其他选项可以获取托管应用程序的完整 URL?或者还有什么更好的想法吗?
最佳答案
我也遇到了同样的问题。这是我的解决方案:
const baseUrl = req.url
.replace(
event.pathParameters.proxy, // => returns api/your/path
event.requestContext.path // => returns /production//api/your/path
)
.split('//') // fix the double-slashes (//)
.join('/');
关于node.js - 无服务器/lambda 容器中的 Express 重定向不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49531705/