首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >部署到AWS时响应504错误的Express.js路由

部署到AWS时响应504错误的Express.js路由
EN

Stack Overflow用户
提问于 2017-05-17 15:48:28
回答 1查看 1.6K关注 0票数 1

我正在通过AWS弹性豆柄服务一个应用程序。localhostngrok按预期提供网页和附加api调用。当上传到AWS-ELB时,504 error是When页面服务后对任何附加api调用的响应。

应用程序通过以下方式为基本index.html文件提供服务:

基本设置与服务INDEX.HTML

代码语言:javascript
复制
app.use(bodyParser.urlencoded({ extended: true }))
app.use(bodyParser.json())
app.all('/', ensureSecure)
function ensureSecure(req, res, next){
  if(req.headers['x-forwarded-proto'] === 'https'){
    // OK, continue
    return next()
  };

   res.redirect('https://' + req.headers.host)
}
app.use(express.static(__dirname + '/../web'), () => {}) // SERVE THE WEBPAGE

var port = process.env.PORT || 443

var router = express.Router()

router.use(function(req, res, next) {

    console.log('here')
    res.setHeader("Access-Control-Allow-Methods", "POST, PUT, OPTIONS, DELETE, GET");
    res.header("Access-Control-Allow-Origin", "*");
    res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");

    next(); // make sure we go to the next routes and don't stop here
});

然后,它有更多的路线在它下面:

后续API调用

代码语言:javascript
复制
app.get('/user/:type', function(req, res) {
  res.setHeader("Access-Control-Allow-Methods", "POST, PUT, OPTIONS, DELETE, GET");
  res.header("Access-Control-Allow-Origin", "*");
  res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");

  var dbparams = {};
  dbparams.TableName = 'FFUserTable';
  dbparams.KeyConditionExpression = 'uid = :uid'
  dbparams.ExpressionAttributeValues = {':uid':req.query.uid};
  ddb_calls.awsDynamoQuery(dbparams, function(data){
    res.json(data);
  })

})

索引页服务并呈现得很好。但是当页面调用它们时,它下面的任何路由都会返回504网关错误。奇怪的是,只有部署到AWS时才会发生这种情况。在使用localhost或使用ngrok时,一切都按预期的方式工作。即使我去掉了https重定向,我也会遇到同样的问题。

通过AWS-Route53正确地设置和路由AWS。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-05-18 14:18:59

这就是问题所在:

代码语言:javascript
复制
app.use(express.static(__dirname + '/../web'), () => {})

我不知道您为什么在那里添加了最后一个函数,但是它是一个(不完整的)中间件函数,它将停止所有请求,因为它什么都不做。

应该是这样:

代码语言:javascript
复制
app.use(express.static(__dirname + '/../web'))
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44029505

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档