Javascript ExpressJS公共文件部署后不提供服务(NodeJS/Express)
项目目录结构如下:Javascript ExpressJS公共文件部署后不提供服务(NodeJS/Express),javascript,node.js,express,static-files,Javascript,Node.js,Express,Static Files,项目目录结构如下: my_project server.js app.js | | - public | ----------| images | javascripts | stylesheets | -------------- imgs ---scripts.js ---styles.css | | - routes | | - views | ----------| partials | ---------
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(u dirname,'public'))代码>。此外,我还尝试过:app.use(express.static(“/public”)代码>但没有任何运气
目前,JS和CSS文件都可以在本地提供,但是当我部署这个应用程序时(我无法控制根目录或结构),它不会提供文件
这就是我不确定如何处理的问题——在本地,在href='/stylesheets/style.css'
前面放置'/'
非常有效,但我知道一旦部署,它将搜索域的路径,当然不会出现。但是,如果我删除“/”
,它将在本地停止工作,但在部署后可能会正确地提供文件
如何解决此问题?如有任何建议,将不胜感激 我找到了解决问题的办法。对于遇到相同问题的未来搜索者,请尝试设置一个动态路径变量,通过每个路径进行渲染。例如:
Myheader.ejs文件包含指向.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: '../' });
});
由于目录结构可能因本地开发环境和实际的生产/测试服务器而异,因此这样做(如果使用类似头部分的概念)将允许您动态地为公共资产提供服务。例如,通过另一个视图的相应路径到另一个视图的渲染路径可能如下所示:
/* GET home page. */
router.get('/', function(req, res, next) {
res.render('index', { path: '' });
});
router.get('/newdirectory', function(req, res) {
res.render("new-view", { path: '../' });
});
这将允许您修改公共资产(脚本、图像、样式表)等,具体取决于其相对于所请求文件的位置。祝你好运 我建议您使用console.log(\uu-dirname)
和console.log(path.join(\uu-dirname,'public'))
,看看这两者是否都是您所期望的。如果\uuu dirname
是您所期望的,并且文件位于您所说的位置,并且您使用的URL类似于href='/stylesheets/style.css'
,那么它应该可以工作(就像它在本地工作一样),因此这些事情之一一定不是您所期望的。您还可以检查文件权限以确保服务器可以读取这些文件。仅供参考,href='/stylesheets/style.css'
不会“搜索域的根目录”。它只搜索您定义的路由,并app.use(express.static(path.join(\uu dirname,'public'))
告诉它通过搜索public/stylesheets/style.css
来搜索public
子目录中的路径,这正是您想要的。您需要URL上的前导/
。这里要解决的唯一问题是确保您的服务器在正确的位置查找文件,并且具有读取文件的正确权限。@jfriend00我刚刚测试了href='./stylesheets/style.css'
,并且我的index.ejs(在根目录下'/'
)文件在部署服务器上使用css样式进行了完美的渲染。但是,没有使用css样式呈现其他视图,即使它们与index.ejs文件位于同一目录中。。