Expressjs无法识别静态文件

时间:2012-04-02 20:01:58

标签: node.js express

我有一个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');
            }
         }
     }

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

4 个答案:

答案 0 :(得分:4)

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

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

使用url:

检索./public/css/style.css中的文件
"/css/style.css"
实际请求文件时,

public不是路径的一部分。

答案 1 :(得分:3)

将静态处理程序更改为:

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);

答案 2 :(得分:0)

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

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

当您尝试使用嵌套文件时,它会丢失,

它说一年前固定在跟踪器上,但我今天尝试并且工作正常

答案 3 :(得分:0)

我明白了。

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

配置适用于Node中的所有文件。请求index.html文件没问题,但是当index.html请求样式表和静态文件时,请求会被Django捕获,然后才能进入Node。 Django看到了该文件并且不知道它是什么并且返回了404错误。

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