在示例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')); });