首页 文章

在无服务器/ lambda容器中使用express重定向无法正常工作

提问于
浏览
1

我已经设置了一个快速应用程序,其中包括:

  • / api / route1

  • / api / route2

  • / api / newroute

  • ......

我需要将route / 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 .

重定向失败,因为正确的 endpoints 现在应该是 /production / api / newroute .

我想避免在res.redirect()中硬编码中缀“/ production”;因为它会因环境而变化 .

因此我检查了是否

  • req.originalUrl

  • req.baseUrl

  • req.path

将提供中缀“/ production”,但事实并非如此 .

req.get('Host')也不提供“/ production”,因为它返回https://xxx.execute-api.us-east-1.amazonaws.com .

我是否可以获得托管应用程序的完整URL的其他选项?或者有更好的想法吗?

1 回答

  • -1

    我遇到了同样的问题 . 这是我的解决方案:

    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('/');
    

相关问题