【问题标题】:Expressjs not recognizing static filesExpressjs 无法识别静态文件
【发布时间】:2012-04-02 20:01:58
【问题描述】:

我有一个 nodejs 应用程序并且正在使用 expressjs。我已经定义了我的静态目录,但是当我访问它时,它不会加载。我的快速配置是:

var app = express.createServer().listen(8001);
app.configure(function(){
      app.use(express.methodOverride());
      app.use(express.bodyParser());
      app.use(app.router);
      app.use('/public', express.static(__dirname + '/public'));
      app.use(express.cookieParser());
      app.use(express.session({ secret: "appsession" }));
      app.use(express.errorHandler({showStack: true, dumpExceptions: true}));
      app.set('views', __dirname + '/views');
      app.set('view engine', 'hbs');
});

在我的/public 目录中,我有 3 个文件夹,css、js 和 img。在css里面我有一个style.css。当我尝试通过http://localhost:8001/public/css/style.css 直接访问它时,我得到:Cannot GET /public/css/style.css

有什么想法我可能做错了吗?

谢谢!

编辑:

这似乎与我的路线设置方式有关。我是这样做的:

     var routes = require('./routes')(db);
     pp.get('/', routes.index);

然后在我的index.js 文件中,我有:

module.exports = function(db) {
    return {

        index: function(req, res, next) { 
                res.render('index');
            }
         }
     }

我启用了错误处理,但是当我以这种方式使用路由时,它不使用表示错误处理,但是如果我把它拿出来,它会这样做。

【问题讨论】:

    标签: node.js express


    【解决方案1】:

    您按如下方式设置静态 http 中间件:

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

    并使用 url 检索 ./public/css/style.css 中的文件:

    "/css/style.css"
    

    当您实际请求文件时,public 不是路径的一部分。

    【讨论】:

    • 试图访问 - 相同的交易无法获取 /css/style.css
    • 当您尝试访问时,控制台日志中有任何内容吗?
    • 也检查文件的权限,但这就是 express/connect 静态中间件的工作方式。它可以很好地处理子目录。
    • 啊,好像是权限错误?当我做 res.sendfile('../public/css/style.css');我得到“禁止”
    【解决方案2】:

    将您的静态处理程序更改为:

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

    那么http://localhost:8001/public/css/style.css应该得到你想要的

    允许curl http://localhost:8001/public/css/style.css:的完整示例应用程序:

    app.js
    |-public
      |-css
        |-style.css
    
    var express = require("express"),
        app = express.createServer();
    app.use('/public/css', express.static(__dirname + '/public/css'));
    app.listen(8001);
    

    【讨论】:

    • 抱歉,忘记了嵌套目录的事情。答案已更新。
    • 静态处理程序确实会遍历子目录。
    • @BradHarris:是的,你是对的。我无法让它工作一秒钟,但事实证明我是个白痴。
    【解决方案3】:

    遇到同样的问题,在这里找到答案

    https://github.com/senchalabs/connect/issues/298

    当您尝试使用嵌套文件时,它有点迷路了,

    它说一年前在追踪器上修复了,但是我今天试过了,效果很好

    【讨论】:

      【解决方案4】:

      我想通了。

      我的主机上运行了两个服务。 Django 在根目录运行站点:http://myURL.com,然后 Node 运行在http://myURL.com/node

      Node.js 中的所有文件的配置都很好。 index.html 文件请求正常,但是 index.html 在请求样式表和静态文件时,请求在到达 Node 之前被 Django 捕获。 Django 看到这个文件,不知道它是什么,返回 404 错误。

      通过禁止 Django 捕获对这些文件的请求,一切正常。

      【讨论】:

        猜你喜欢
        • 2014-04-20
        • 1970-01-01
        • 2018-03-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多