Sto facendo alcuni esperimenti con node.js + express e iisnode. Ho la seguente applicazione molto semplice, che si trova in C:\tsapp-deploy\tsappsvr\TestExpress\0.0.0
:Node.js + App basata su Express non in esecuzione con iisnode
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);
});
package.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>
La mia configurazione è: Windows 8.1, IIS 8; versione iisnode 0.2.11, versione del nodo v0.10.28.
Quando viene lanciato dalla riga di comando (C:\tsapp-deploy\tsappsvr\TestExpress\0.0.0>node app.js
), l'app viene eseguita come previsto: nel browser, vado a http://localhost:2709/
e vedo "Ciao, mondo!".
My IIS sta attualmente eseguendo altre applicazioni basate su node.js che non utilizzano Express da ubicazioni simili (ovvero da C:\tsapp-deploy\tsappsvr\appname\x.y.z\index.js
), quindi presumo che sia configurato correttamente, ma quando provo a eseguire questa app dal browser, digitando http://localhost/tsappsvr/TestExpress/0.0.0/app.js
Ottengo un 404 non trovato (in IE) o un "Impossibile ottenere /tsappsvr/TestExpress/0.0.0/app.js" in Chrome e Firefox.
Immagino che il problema potrebbe essere nel mio web.config, ma non riesco a capire come cambiarlo per far funzionare la mia app. Ho provato diverse modifiche a web.config come suggerito in altre risposte a domande simili, ma non ancora riuscito. Qualche suggerimento?
Grazie in anticipo.
Grazie David, non ho installato l'estensione di riscrittura dell'URL. Ora ce l'ho e ho aggiunto la regola di riscrittura a da web.config, ma ancora senza fortuna. Sono riuscito ad avere una risposta modificando il mio app.js come segue: 'var express = require ('express'); var http = require ('http'); var app = express(); app.use (funzione (req, res, next) { res.send ('Hello, World!'); }); var server = http.createServer (app); var port = process.env.PORT || 2709; server.listen (porta); ', ma quando provo qualcosa come' app.use ("/ static", express.static (__ dirname + '/ public')); 'la mia app continua a cadere nel middleware catch-all. – eca