为啥我无法从 Expressjs/Nodejs 访问我的 javascript 文件?
Posted
技术标签:
【中文标题】为啥我无法从 Expressjs/Nodejs 访问我的 javascript 文件?【英文标题】:Why can't I get to my javascript files from Expressjs/Nodejs?为什么我无法从 Expressjs/Nodejs 访问我的 javascript 文件? 【发布时间】:2012-02-17 19:41:36 【问题描述】:我开始尝试使用 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
当我导航到 localhost/ekmHoliCal/index 时,我得到了预期的索引页面。但是,如果我查看源代码,我会看到指向 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 can't GET my static files, why?),但看不出我做错了什么
【问题讨论】:
【参考方案1】:您的脚本标签路径错误。应该是
<script type="text/javascript" src="/javascripts/simon.js"></script>
在 express 中,您设置了以下内容:
app.use express.static(__dirname + '/public')
这告诉 express/node public
目录应该作为你的 web 根目录。里面的所有东西都可以通过/
引用,所以如果你也有一个CSS文件夹,你可以使用/css/styles.css
【讨论】:
谢谢保罗。我已经尝试过你的建议,但没有成功。也就是说,你的答案是正确的。我否认提到的是我在 IIS 下的 Windows 上运行它,这似乎是我在 IIS 下的站点配置导致了问题。【参考方案2】:按照 Paul Armstrong 所说的,您也可以这样做。
app.use('/public', express.static(__dirname + '/public');
这将允许您像这样引用您的 js 文件:
<script src="/public/javascripts/simon.js"></script>
【讨论】:
EXACT : Express api 4.x 说 : 从应用程序目录中的“public”目录为应用程序提供静态内容: // GET /style.css 等app.use(express.static(__dirname + '/public'));否则 '/' 是您计算机的根目录。以上是关于为啥我无法从 Expressjs/Nodejs 访问我的 javascript 文件?的主要内容,如果未能解决你的问题,请参考以下文章
nodemon 无法使用 express v4 启动 nodejs 应用程序