Heroku节点应用程序在路由到静态文件之前

时间:2015-01-24 16:46:58

标签: node.js express

我一直在使用heroku来托管节点应用。我在公共目录中声明我的js / css / images。

process.env.PWD = process.cwd();
app.set('views',process.env.PWD + '/views');
app.use(express.static(process.env.PWD + '/public'));

我尝试过__dirname而不是process.cwd(),两者都是一样的。无论如何,在这个应用程序中,我有两个我渲染的路线:

app.get('/challenge', function(req, res){
  res.render('challenge');
});

app.get('/dashboard', function(req, res){
  res.render('dashboard');
});

所以在我的views目录中,我有challenge.ejs和dashboard.ejs。这两个文件都包含css和js,例如

<script type="text/javascript" src="js/libs/bootstrap.min.js"></script>

当我在localhost上运行我的应用程序时,我的两个路由都正确呈现,并找到这个js文件,但是,当我将我的应用程序推送到heroku时,只有仪表板应用程序正确呈现此文件路径。挑战路线预先挑战&#34;挑战&#34;尝试查找此js文件时的url,因此无法找到js文件。

我的意思是,当我去myapp.com/dashboard时,它会加载myapp.com/js/libs/bootstrap.min.js,

但是当我去myapp.com/challenge时,它会尝试加载myapp.com/challenge/js/libs/bootstrap.min.js,这是不存在的。

我很困惑为什么它会在localhost上找到它,但是在部署时却没有。任何帮助都会受到赞赏,因为我已经尝试了一切我无法想到的东西。

编辑: 当我尝试将参数添加到任何URL路径

时,我也会遇到此行为
app.get('/challenge/:my_param',  function(req, res){
  res.render('challenge');
});

再次编辑: 我可以通过添加&#34;前置文本&#34;来解决这个问题。渲染公共目录,但我觉得我在欺骗......

app.use("/challenge", express.static(process.env.PWD + '/public'))
app.use(express.static(process.env.PWD + '/public'));

1 个答案:

答案 0 :(得分:0)

它基本上是如何通过localhost vs Heroku解析文件路径的。使用相对于根的路径,修复应该很容易。

<script type="text/javascript" src="./js/libs/bootstrap.min.js"></script>