Node.js + Express-basierte app läuft nicht mit iisnode
Ich mache einige Experimente mit node.js + express-und iisnode.
Ich habe das folgende sehr einfache app, die sich in C:\tsapp-deploy\tsappsvr\TestExpress\0.0.0
:
app.js:
var express = require('express');
var app = express();
app.use(express.static(__dirname + "/public"));
var port = process.env.PORT || 2709;
app.listen(port, function() {
console.log('Listening on port ' + port);
});
Paket.json:
{
"name": "TestExpress",
"version": "0.0.0",
"private": true,
"dependencies": {
"express": "3.x"
}
}
web.config:
<configuration>
<system.webServer>
<handlers>
<add name="iisnode" path="app.js" verb="*" modules="iisnode" />
</handlers>
</system.webServer>
</configuration>
public/index.html:
<!doctype html>
<html>
<head>
<script language="javascript" type="text/javascript" src="js/jquery.js"></script>
<script language="javascript" type="text/javascript">
$(document).ready(function() {
console.log("READY!");
$("#hello").html("Hello, World!");
});
</script>
</head>
<body>
<h1 id="hello" style="text-align:center;"></h1>
</body>
</html>
Meine Konfiguration: Windows 8.1, IIS 8; iisnode version 0.2.11, Knoten version v0.10.28.
Beim Start von der Kommandozeile (C:\tsapp-deploy\tsappsvr\TestExpress\0.0.0>node app.js
), die app läuft als erwartet: in den browser, gehe ich zu http://localhost:2709/
sehen und "Hallo, Welt!".
Mein IIS läuft derzeit andere Knoten.js-basierte Anwendungen, die nicht mit express von ähnlichen Orten (z.B. von C:\tsapp-deploy\tsappsvr\appname\x.y.z\index.js
), so nehme ich an, es sollte richtig konfiguriert sein, aber wenn ich versuche, führen Sie diese app aus dem browser eingeben http://localhost/tsappsvr/TestExpress/0.0.0/app.js
bekomme ich eine 404-Nicht Gefunden wird (im IE) oder "Cannot GET /tsappsvr/TestExpress/0.0.0/app.js" in Chrome und Firefox.
Ich denke, dass das problem in meinem web.config, aber ich kann nicht herausfinden, wie es zu ändern, um meine app zu arbeiten. Ich habe versucht, mehrere änderungen in web.config wie bereits in anderen Antworten auf ähnliche Fragen, aber keine Erfolg noch.
Irgendwelche Vorschläge?
Vielen Dank im Voraus.
InformationsquelleAutor eca | 2014-06-09
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich denke ich habe eine Lösung gefunden für mein problem:
web.config:
Bitte beachten Sie die
deployPath
Schlüssel inappSettings
Abschnitt, dessen Wert festgelegt ist, der app den virtuellen Pfad (in IIS festgelegt). In meinem Fall ist es/tsappsvr/TestExpress/0.0.0
.app.js:
Variable
deployPath
wird als Präfix für alle Prozeduren (mit Ausnahme der "Nicht-Gefunden" - Prozedur). Wenn app.js gestartet wird von iisnode, deployPath es ist Teilprocess.env
, während es ist nicht definiert, wenn app.js gestartet wird von der Kommandozeile (z.B.C:/tsapp-deploy/tsappsvr/TestExpress/0.0.0>node app.js
). Dies stellt sicher, dass app.js funktioniert in beiden Fällen.Jetzt Tippen
http://localhost/tsappsvr/TestExpress/0.0.0/
im browser ich Feuer den default-handler; Anhängen/pages
um die ehemalige URL, die ich haben Zugriff auf statische Inhalte, die beim anfügen/api
ich Feuer die REST-API handler. Das gleiche passiert, fürhttp://localhost:2709/
als Basis-URL.Ich habe Probleme mit den entsprechenden statischen Inhalt, der in der public/javascripts oder public/stylesheets-Verzeichnisse. Ich bin mit der app.use(express.static(path.join(__dirname, deployPath, 'public'))); in meinem express app.js Datei
Es herausgefunden: app.verwenden(deployPath, express.static(path.join(__dirname, 'public')));
InformationsquelleAutor eca
Eric, haben Sie installieren Sie das url-rewrite Erweiterung ?
Hier ist die Konfiguration, die ich in meinem web.config:
var express = require('express'); var http = require('http'); var app = express(); app.use(function(req, res, next){ res.send('Hello, World!'); }); var server = http.createServer(app); var port = process.env.PORT || 2709; server.listen(port);
, aber wenn ich versuche, so etwas wieapp.use("/static", express.static(__dirname + '/public'));
meine app hält fallen in der catch-all-middleware.InformationsquelleAutor David Dias