2012-04-02 11 views
2

Ich habe eine Nodejs App und verwende Expressjs. Ich habe mein statisches Verzeichnis definiert, aber wenn ich darauf zugreife, wird es nicht geladen. Mein Express-config:Expressjs nicht statische Dateien erkennen

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

Inside my /public Verzeichnis Ich habe 3 Ordner, css, js und img. In CSS habe ich eine style.css. Wenn ich versuche, direkt über http://localhost:8001/public/css/style.css darauf zuzugreifen, bekomme ich: Cannot GET /public/css/style.css

Irgendwelche Ideen, was ich falsch machen könnte?

Danke!

EDIT:

Es scheint verwandt zu sein, wie ich meine Routen eingerichtet haben. Ich mache es so:

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

Dann in meiner index.js Datei, die ich habe:

module.exports = function(db) { 
    return { 

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

ich meine Fehlerbehandlung aktiviert ist, aber wenn ich das Routing auf diese Weise verwenden, es doesn Verwenden Sie keine Fehlerbehandlung, aber wenn ich das herausnehme, tut es das.

Antwort

3

Ihre statischen Handler Um dies zu ändern:

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

Dann http://localhost:8001/public/css/style.css bekommen sollten, was Sie

Vollbeispielanwendung, die curl http://localhost:8001/public/css/style.css wollen erlaubt:

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

Yeah versuchte das, funktioniert auch nicht. – dzm

+0

Sorry, habe die verschachtelte Verzeichnis-Sache vergessen. Antwort aktualisiert –

+0

statische Handler durchläuft Unterverzeichnisse. –

4

Sie Setup die statische http Middleware als folgt:

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

Und eine Datei in ./public/css/style.css mit der URL abrufen:

"/css/style.css" 

Öffentlichkeit nicht Teil des Pfades ist, wenn Sie tatsächlich die Datei anfordern.

+1

Versucht, um darauf zuzugreifen - selbe Abmachung Kann/GET/style.css nicht erhalten – dzm

+0

ist irgendetwas in Ihrem Konsolenprotokoll, wenn Sie versuchen, darauf zuzugreifen? –

+0

überprüfen Sie auch die Berechtigungen für Ihre Dateien, aber so funktioniert die statische state-of-connect/connect-Verbindung. Es behandelt Unterverzeichnisse gut. –

0

wurde in der gleichen Ausgabe laufen fand die Antwort hier

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

Wenn Sie versuchen, haben verschachtelte Dateien zu verwenden, um es irgendwie verloren gehen,

es vor einem Jahr auf dem Tracker befestigt sagt, aber ich habe heute versucht und gut funktioniert

0

Ich fand es heraus.

Ich habe zwei Dienste auf meinem Host ausgeführt. Django führt die Site an der Wurzel: , und dann läuft Node bei http://myURL.com/node

Die Konfiguration ist in Ordnung mit allen Dateien in Node. Die Datei index.html wird in Ordnung angefordert, aber die index.html, wenn sie die Stylesheets und statischen Dateien anfordert, wird die Anfrage von Django abgefangen, bevor sie zu Node gelangt. Django sah die Datei und hatte keine Ahnung was das war und gab den 404 Fehler zurück.

Durch die Deaktivierung von Django die Anfragen an diese Dateien zu fangen, funktioniert alles gut.