2012-09-18 10 views
5

Ich bin sicher, dass diese Frage eine Million Mal gestellt wurde, aber ich habe noch keine Lösung für das folgende Problem gefunden.iisnode und express

Ich habe eine grundlegende Anwendung läuft mit Nodejs und Express. Wenn ich die Anwendung im Knoten ausführe, sendet sie mich standardmäßig an die index.html in meinem Öffentlichen Ordner. Auch wenn ich keine Routen eingerichtet habe. Ich möchte, dass das passiert.

Ich habe iisnode installiert und eine neue Anwendung unter "Standard-Website" namens "Geräte" erstellt. Ich habe meine Bewerbung unverändert dort abgegeben. Lesen um brauchte ich ein paar Sachen aus der web.config sortieren und beschlossen, mit der Config gehen hier erwähnt (nicht die yaml):

http://tomasz.janczuk.org/2012/05/yaml-configuration-support-in-iisnode.html

Wenn ich versuche, und laden Sie die App in meinem Browser, um es immer versucht, den Weg in meiner app.js zu finden und wirft Nachrichten an mich zurück wie:

kann nicht/devices/

ich ziehe wirklich meine Haare mit diesem und weiß nicht, was machen! Muss ich eine Standardroute für statischen Inhalt in meinem app.js-Einstiegspunkt einrichten? Ich habe nach dem an Ort und Stelle:

app.configure(function(){ 
    app.set('port', process.env.PORT || 3000); 
    app.set('views', __dirname + '/views'); 
    app.set('view engine', 'jade'); 
    app.use(express.favicon()); 
    app.use(express.logger('dev')); 
    app.use(express.bodyParser()); 
    app.use(express.methodOverride()); 
    app.use(app.router); 
    app.use(express.static(path.join(__dirname, 'public'))); 
}); 

es gibt aber noch gib mir nicht mehr als index.html, wenn ich die Anwendung laden von ihm Wurzel ist:

‚http: // localhost/devices /‘

Kann mir jemand dabei helfen?

+0

Ich habe dies auf einem anderen Thread beantwortet. Siehe meine Antwort [hier] (http://stackoverflow.com/a/31482232/2980607) – peteb

Antwort

5

Der einfachste Weg, dieses Problem anzugehen, besteht darin, eine dedizierte IIS-Website für Ihre Anwendung zu erstellen, anstatt eine IIS-Anwendung auf einer IIS-Website zu erstellen.

Wenn Sie eine dedizierte Website für Ihre Anwendung node.js in IIS haben, können Sie auf die Anwendung im Stammverzeichnis des URL-Bereichs zugreifen, z. http://myapp.com/, was die Standard-Express-Route-Konfiguration erwartet. Wenn Sie dagegen eine IIS-Anwendung auf einer IIS-Website zum Hosten Ihrer node.js-Anwendung erstellen (z. B. devices), können Sie auf eine URL zugreifen, die der Stamm-URL der Website untergeordnet ist, z. http://myapp.com/devices/. Das zusätzliche URL-Pfadsegment (devices) wird von Ihrer Express-App nicht erwartet und ist nicht für die Verarbeitung konfiguriert. Daher lehnt es die Anfrage ab.

Wenn Sie darauf bestehen, die Anwendung node.js als IIS-Anwendung in IIS zu hosten, müssen Sie Ihre Expressroute-Konfiguration erweitern, um das zusätzliche URL-Pfadsegment zu erwarten, das dem IIS-Anwendungsnamen entspricht.

+0

Ich werde nicht downvote, da Sie das Problem zumindest beschreiben, aber ich werde nicht upvote, denn für all das hast du noch didn Ich biete keine Lösung an. Letztendlich dienen die erforderlichen Änderungen (siehe meine Antwort unten) dazu, die App in jeder Umgebung robuster zu machen und das Problem zu lösen, das durch virtuelle Verzeichnisse in IIS verursacht wird. – rainabba

+0

Ich habe Sie updated, weil die Knoten-App auf eine eigene dedizierte Website isoliert wird, wodurch weniger Verwirrung darüber entsteht, was die Wurzel des URL-Bereichs ist – Alexander