在示例express-jade项目中获取样式表和js的404
我使用默认的快速库在nodejs中创build了一个简单的静态页面。 但是,当我运行它时,nodejs无法拾取公共文件并在其上引发404。
我相信我所提供的道路是正确的。 这让我发疯。 我知道这个问题必须如此小而简单,以至于不值一提,但我无法find它。
你能帮我在这里吗?
代码在Rishavs / ComingSoonPage的 github上
感谢您的时间和帮助。
〜Rishav
express.static
方法不包括recursion的子文件夹。 您的脚本和样式分别在public / javascripts和public / stylesheets下。 你必须让expression知道这些文件夹包含应直接提供的静态文件,如下所示:
app.configure(function(){ app.set('port', process.env.PORT || 3000); app.set('views', __dirname + '/views'); app.set('view engine', 'jade'); app.use(express.favicon()); app.use(express.logger('dev')); app.use(express.bodyParser()); app.use(express.methodOverride()); app.use(app.router); app.use(express.static(path.join(__dirname, 'public'))); app.use('public/javascripts', express.static(path.join(__dirname, 'public/javascripts'))); app.use('public/stylesheets', express.static(path.join(__dirname, 'public/stylesheets'))); });
最后两行是重要的。 请注意,有两个parameter passing给app.use
方法。 第一个告诉脚本将被提供的path(也就是你必须在浏览器中input以获得它)。 第二个是服务器上文件的物理位置。
在你的app.js
,先安装静态文件,如下所示:
app.configure(function(){ app.set('port', process.env.PORT || 3000); app.set('views', __dirname + '/views'); app.set('view engine', 'jade'); app.use(express.static(path.join(__dirname, '/public'))); app.use(express.favicon()); app.use(express.logger('dev')); app.use(express.bodyParser()); app.use(express.methodOverride()); app.use(app.router); });
编辑 :注意在/public
VS
像提到的标记。 你的HTML不应该引用“公共”。
<link href="../../styles/site.css" rel="stylesheet" />
与
<link href="../../public/styles/site.css" rel="stylesheet" />
在我的情况下, 有必要指定子目录,以及主要的“公共”静态目录,例如:
app.use(express.static(path.join(__dirname, 'public'))); app.use('/public/uploads', express.static(path.join(__dirname, '/public/uploads')));
另外玩了一段时间后,我发现“public”静态目录被声明为“/ public”或“public”(带有或不带有斜杠)没有区别。
但是,如果我错过了从子目录的主要斜杠,也就是说,这给了我404:
app.use('public/uploads', express.static(path.join(__dirname, 'public/uploads')));
但是这工作正常:
app.use('/public/uploads', express.static(path.join(__dirname, '/public/uploads')));
当然,确保权限的旧板栗正确设置在目录中!
我正在使用快车2.5.8我能够像这样访问公众:
app.use(express.static(__dirname + '/public'));
然后我注意到,当我在我的布局中有这样的东西:
<link rel="stylesheet" type="text/css" href="style.css">
它没有像预期的那样服务我的style.css,期待我做类似的事情
<link rel="stylesheet" type="text/css" href="../stylesheets/style.css">
添加以下到我的app.js文件解决了我的问题:
app.use(express.static(__dirname + '/public/stylesheets')); app.use(express.static(__dirname + '/public/javascripts'));
一切都是这样的:
app.configure(function(){ app.set('views', __dirname + '/views'); app.set('view engine', 'handlebars'); app.use(express.bodyParser()); app.use(express.methodOverride()); app.use(app.router); app.use(express.static(__dirname + '/public')); app.use(express.static(__dirname + '/public/stylesheets')); app.use(express.static(__dirname + '/public/javascripts')); });