2012-04-02 82 views
2

我有一個nodejs應用程序並使用expressjs。我已經定義了我的靜態目錄,但是當我訪問它時,它不會加載。我的快遞配置爲: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'); 
      } 
     } 
    } 

我使我的錯誤處理,但是當我使用的路由這樣,它不使用表示錯誤處理,但是如果我把它拿出來的話,它確實如此。

回答

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

是的,試過了,也不管用。 – dzm 2012-04-02 20:12:38

+0

對不起,忘了嵌套的目錄。答案已更新。 – 2012-04-02 20:31:02

+0

靜態處理程序會遍歷子目錄。 – 2012-04-02 20:36:19

4

您設置的靜態HTTP中間件如下:

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

和檢索./public/css/style.css與URL文件:

"/css/style.css" 

公衆是不是路徑的一部分,當你實際請求文件。

+1

試圖訪問 - 同樣的交易無法獲取/css/style.css – dzm 2012-04-02 20:18:46

+0

當您嘗試訪問它時,控制檯日誌中是否有任何內容? – 2012-04-02 20:28:53

+0

也檢查您的文件的權限,但這是快速/連接靜態中間件的工作方式。它處理子目錄就好了。 – 2012-04-02 20:35:07

0

我想通了。

我有兩個服務我的主機上運行。 Django在根目錄下運行該站點:,然後節點運行在http://myURL.com/node

該配置適用於Node中的所有文件。 index.html文件的請求很好,但index.html在請求樣式表和靜態文件時,請求會在Django到達Node之前被捕獲。 Django看到了這個文件,不知道它是什麼,並返回了404錯誤。

通過禁用Django將請求捕獲到這些文件,它一切正常。