为啥我无法从 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 应用程序

如何使用 Webpack 捆绑 Express Js (NodeJs) 和 Pug 引擎?

Xcode Playgrounds:源文件无法互相访​​问

RUN命令无法访问卷

nodejs / express中的数据库会话支持[关闭]

无法从 KASlideShow pod 加载图像