2013-11-19 13 views
11

Quindi sono piuttosto in ritardo per la festa Node.js. Soprattutto perché nessuno mi ha invitato ... Grazie. Detto questo, sto iniziando a lavorarci. Sono venuto da uno sfondo classico ASP quindi ci sono alcune cose che devo ancora capire.Node.js Server in esecuzione da una sottocartella

Se qualcuno può indicarmi la giusta direzione, sarebbe fantastico. Grazie in anticipo.

Quindi, sto configurando un server in modo standard.

var http = require('http'); 
http.createServer(function (req, res) { 
    res.writeHead(200, {'Content-Type': 'text/plain'}); 
    res.end('Hello World\n'); 
}).listen(1337, '127.0.0.1'); 
console.log('Server running at http://127.0.0.1:1337/'); 

Questo mi dà una bella pagina al http://127.0.0.1:1337/. Bello.

Il sito che sto costruendo risiede al http://newsite.dev/. È possibile (non ridere) configurare il server del nodo per l'esecuzione da una sottocartella del mio sito, diciamo http://newsite.dev/api/?

Quindi, qualsiasi query da script sul lato client può essere inviata a /api/ anziché a http://127.0.0.1:1337/.

MODIFICA: Per rendere le cose un po 'più chiare. Attualmente sto eseguendo un framework PHP personalizzato a http://newsite.dev/, ma sto cercando di abbandonare questo lungo termine. Nel frattempo, è necessario eseguirli in parallelo.

EDIT Anche in questo caso, per chiarire, io sono in esecuzione tutto sul mio OS X, in modo da apache (MAMP) installazione.

+1

Suppongo che ci sia un server diverso (come Apache o nginx) in esecuzione su 'http: // newsite.dev' già? In questo caso è probabilmente più facile usare un sottodominio, come 'http: // api.newsite.dev' dove è in esecuzione l'applicazione del nodo. –

+0

@max Aggiornato per chiarire. Questo significa che non è possibile eseguire da una sottocartella? – jamesmhaley

+1

sei su apache o iis o cosa? questo aiuterà la risposta. –

risposta

4

Hai un sacco di opzioni, ma nessuna di queste ti consentirà di utilizzare la porta 80 per l'applicazione Node sullo stesso server di Apache + PHP senza proxy.

I suoi due migliori opzioni sono le seguenti:

1) creare un nuovo sottodominio - creare una nuova voce DNS per node.newsite.dev, e diretto che sottodominio ad un IP completamente diverso, su un server diverso (tuttavia, tecnicamente, è possibile impostare due IP sullo stesso server, vedere here), quindi il nodo può essere eseguito sulla porta 80 sul proprio server separato

2) avere Apache eseguito sulla porta 80 su/percorso/su/apache/publicdir/newsite.dev e il nodo viene eseguito sulla porta 1337 in /path/to/node/application/newsite.dev, quindi è possibile accedere ai file apache allo http://newsite.dev e all'applicazione nodo su http://newsite.dev:1337

Qualunque cosa tu faccia, non mettere la tua applicazione di nodo in una sottodirectory di cui Apache è a conoscenza, a meno che tu non voglia servire quei file .js pubblicamente.

EDIT per rispondere alla vostra EDIT: Se il vostro obiettivo è quello di spostare al nodo esclusivamente ed eventualmente spegnere Apache + PHP, allora la cosa migliore è quella di utilizzare un sottodominio. Il rovescio della medaglia è che dovrai usare collegamenti completi qualificati ovunque. Il lato positivo è che quando ti senti abbastanza della tua applicazione nel nodo, puoi trovare/sostituire (#//(www\.)?newsite.dev#, '//apache.newsite.dev') e (#//node.newsite.dev#, '//newsite.dev'), e poi quando sei completamente fuori da Apache, basta spegnerlo.

5

Si sta richiedendo di creare una directory virtuale e sì è possibile impostare Node.js con PHP ma è necessario fare una piccola lettura.

Una directory virtuale è un sito che vive all'interno di una cartella come www.yourwebsite/myotherwebsite

Ecco come impostare che fino in Apache.

http://httpd.apache.org/docs/current/vhosts/examples.html

Ecco come impostare che fino a IIS.

http://technet.microsoft.com/en-us/library/cc771804(v=ws.10).aspx

Si sarebbe quindi necessario collegare Node.js con Apache o IIS. Ecco altre istruzioni.

Linux: How can I implement virtual directories with node.js and express?

di Windows: http://www.hanselman.com/blog/InstallingAndRunningNodejsApplicationsWithinIISOnWindowsAreYouMad.aspx

0

un solo server può ascolto su una porta alla volta. Non puoi avere Node.js e qualche altro server sulla stessa porta.

La cosa migliore da fare è impostare un nome host diverso per l'altro server.

Se non è possibile farlo, il modo standard è quello di inoltrare le richieste da un server all'altro. Questo è relativamente facile da fare, ma non hai specificato quale server stai utilizzando, quindi è impossibile essere più specifici.

Problemi correlati