项目目录结构如下:
my_project
server.js
app.js
|
| - public
| ----------| images | javascripts | stylesheets
| -------------- imgs ---scripts.js ---styles.css
|
| - routes
|
| - views
| ----------| partials
| -------------- header.ejs, searchbar.ejs, footer.ejs
| (rendered views.ejs)
|
|
| misc. files
在我的 header.ejs 文件中,这是我的.css文件的路径,该文件位于 public / stylesheets / style.css :href='/stylesheets/style.css'
在我的 app.js 文件中,这是我的代码,告诉express提供公共目录:app.use(express.static(path.join(__dirname, 'public')));
。另外,我也尝试过:app.use(express.static('/public'));
但没有运气。
目前,JS和CSS文件都在本地提供,但是当我部署这个应用程序时(我无法控制根目录或结构),它不会提供文件。
这就是我不确定如何处理 - 在本地,让'/'
前面的href='/stylesheets/style.css'
完美无缺,但我知道一旦部署,这将会搜索路线该域名,当然不会在那里。但是,如果我删除了'/'
,它会在本地停止工作,但可能会在部署后正确地提供文件。
如何解决此问题?任何意见,将不胜感激。
答案 0 :(得分:0)
我找到了解决问题的方法。对于遇到相同问题的未来搜索者,请尝试设置通过每个路径呈现的动态路径变量。例如:
我的 header.ejs 文件包含指向.css文件的以下链接:<link rel='stylesheet' href='<%= path %>stylesheets/style.css'>
。
然后,您可以通过相应的路由器将特定的路径传递到所需的 view.ejs 。例如,我的 index.js 路由包含以下内容:
/* GET home page. */
router.get('/', function(req, res, next) {
res.render('index', { path: '' });
});
由于目录结构可能因本地开发环境而异,因此执行此操作(如果使用标题部分等概念)将允许您动态提供公共资源。例如,通过其相应路径到另一个视图的渲染路径可能如下所示:
router.get('/newdirectory', function(req, res) {
res.render("new-view", { path: '../' });
});
这将允许您修改公共资源(脚本,图像,样式表)等,具体取决于其相对于所请求文件的位置。祝你好运!