node.js - 无服务器/lambda 容器中的 Express 重定向不起作用

标签 node.js amazon-web-services express aws-lambda serverless

我已经设置了一个带有各种路线的快速应用程序,例如:

  • /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/

相关文章:

node.js - Express.js 和请求 : Headers unexpectedly reset themselves

node.js - Node.js 和 AngularJS 中的 CORS

arrays - 如何读取从nodejs中的req.session加载的数组的长度?

Node.js native 模块不是有效的 Win32 应用程序错误

javascript - 如何用 Promises 写这个?

javascript - 如何在node.js中以特定时间戳搜索数组中的结果

amazon-web-services - 使用 AWS S3 静态网络托管将文件上传到 S3

amazon-web-services - AWS CodeDeploy : Service role Cannot assume role provided

javascript - “汇总”未被识别为内部或外部命令

java - 使用java api获取ec2中可用实例的数量