为什么我不能从Expressjs / Nodejs获得我的JavaScript文件?

我开始尝试nodejs / expressjs / coffeescript和玉视图引擎。

我有以下的设置,从我可以看到周围的例子看起来很标准。

app = express.createServer().listen process.env.PORT app.configure -> app.set 'views', __dirname + '/views' app.set 'view engine', 'jade' app.set 'view options', layout: true app.use express.bodyParser() app.use express.static(__dirname + '/public') app.use app.router app.get '/ekmHoliCal/index', (req, res) -> res.render 'index' 

我的目录结构如下:

 -- ekmHoliCal -- public --javascripts client.js -- views index.jade layout.jade 

索引文件只包含下列行: 这是索引文件

layout.jade文件包含:

 !!! 5 html(lang="en") head title Users script(type="text/javascript", src="http://code.jquery.com/jquery-1.6.4.js") script(type="text/javascript", src="/ekmholical/javascripts/client.js") body div!= body 

当我导航到本地主机/ ekmHoliCal /索引我得到索引页面按预期。 但是,如果我查看源,我看到一个链接到jQuery的:

 <script type="text/javascript" src="http://code.jquery.com/jquery-1.6.4.js"> 

如果我点击那个链接,我确实看到了jquery文件的来源。

索引文件源也包含一个到我的client.js文件的链接,如下所示:

 <script type="text/javascript" src="/ekmholical/javascripts/simon.js"></script> 

但是当我点击我得到

无法获取/ekmholical/javascripts/client.js

我见过这个相关的问题( Express-js无法获取我的静态文件,为什么? ),看不到我做错了什么

您的脚本标记有错误的path。 它应该是

 <script type="text/javascript" src="/javascripts/simon.js"></script> 

明示,你已经设置了以下内容:

 app.use express.static(__dirname + '/public') 

这就告诉express / node public目录应该作为你的web根目录。 里面的所有东西都可以通过/来引用,所以如果你还有一个CSS文件夹,你可以使用/css/styles.css

跟随保罗·阿姆斯特朗所说的,你也可以这样做。

 app.use('/public', express.static(__dirname + '/public'); 

这将允许你像这样引用你的js文件:

 <script src="/public/javascripts/simon.js"></script>