一旦部署了ExpressJS公共文件(NodeJS / Express)

时间:2017-06-14 16:01:54

标签: javascript node.js express static-files

项目目录结构如下:

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'完美无缺,但我知道一旦部署,这将会搜索路线该域名,当然不会在那里。但是,如果我删除了'/',它会在本地停止工作,但可能会在部署后正确地提供文件。

如何解决此问题?任何意见,将不胜感激。

1 个答案:

答案 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: '../' });        
});

这将允许您修改公共资源(脚本,图像,样式表)等,具体取决于其相对于所请求文件的位置。祝你好运!