gpt4 book ai didi

node.js - Heroku Node 应用程序将路由添加到静态文件

转载 作者:搜寻专家 更新时间:2023-11-01 00:07:50 30 4
gpt4 key购买 nike

我一直在使用 heroku 来托管 Node 应用程序。我在公共(public)目录中声明我的 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');
});

所以在我的 View 目录中,我有 challenge.ejs 和 dashboard.ejs。两个文件都有css和js include,比如

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

当我在本地主机上运行我的应用程序时,我的两个路由都正确呈现,并找到这个 js 文件,但是,当我将我的应用程序推送到 heroku 时,只有仪表板应用程序正确呈现这个文件路径。当试图找到这个 js 文件时,challenge 路由会在 url 前面加上“challenge”,因此无法找到 js 文件。

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

然而,当我转到 myapp.com/challenge 时,它​​会尝试加载 myapp.com/challenge/js/libs/bootstrap.min.js,它不存在。

我很困惑为什么它可以在本地主机上找到,但部署后却不能。任何帮助将不胜感激,因为我已经尝试了所有我能想到的方法,但都无济于事。

编辑:当我尝试向任何 url 路径添加参数时,我也会遇到此行为

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

再次编辑:我可以通过添加“前置文本”来呈现公共(public)目录来解决这个问题,但我觉得我在作弊......

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

最佳答案

这基本上是文件路径是如何通过本地主机与 Heroku 解析的。使用相对于根的路径修复应该很容易。

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

关于node.js - Heroku Node 应用程序将路由添加到静态文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28127806/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com