我一直在使用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'));
答案 0 :(得分:0)
它基本上是如何通过localhost vs Heroku解析文件路径的。使用相对于根的路径,修复应该很容易。
<script type="text/javascript" src="./js/libs/bootstrap.min.js"></script>