Come accedere al server NodeJS su LAN?


16

Non sono il ragazzo più esperto di sempre con il networking, ma qui va ...

Ho creato un'applicazione con NodeJS e vorrei testare l'applicazione sulla mia LAN con la mia famiglia. L'applicazione in ascolto sulla porta 1337per le connessioni e posso accedere al bene di applicazione attraverso la mia PC digitando localhost:1337, 192.168.0.3:1337o anche http://joel-pc:1337/nella barra degli indirizzi del mio browser.

Eseguirò anche Apache insieme a NodeJS, e posso accedere a questo bene digitando 192.168.0.3o http://joel-pc/nella barra degli indirizzi di un browser purché sia ​​connesso alla stessa rete.

Ora ecco la parte strana; Se mi fermo il servizio apache, cambiare la mia applicazione nodo in ascolto sulla porta 80(http) al posto della 1337, sarà accessibile sul mio pc digitando localhost, 192.168.0.3o anche http://joel-pcnella barra degli indirizzi del mio browser. Tuttavia, non riesco ancora ad accedere a NodeJS su nessun altro PC della mia rete a parte il mio.

Ho provato a creare una regola in uscita in Windows 7 per consentire l'accesso alla porta 1337, ma non riesco ancora ad accedere al mio server NodeJS su un PC diverso dal mio, anche se è in ascolto sulla porta 80. C'è qualcosa di ovvio Mi sto perdendo qui?


2
Cosa succede se, solo come test, si spegne il firewall?
cheesemacfly,

1
Se spengo il firewall posso accedere perfettamente al nodo, grazie :) Ma sicuramente ci deve essere un modo più sicuro di fare le cose?
Joel Murphy,

1
L'ho rimesso ora, non ti preoccupare :) Devo pubblicare anche lì? O c'è un modo per spostare la mia domanda? grazie
Joel Murphy l'

2
Saluti. L'ho segnalato anche perché ho letto in un altro thread che deve essere segnalato da 3 utenti prima che qualsiasi azione venga intrapresa da un moderatore
Joel Murphy,

2
La bandiera che ho sollevato è stata ritenuta utile, quindi non sono sicuro di quanto tempo può richiedere!
cheesemacfly,

Risposte:


11

Molto probabilmente l'applicazione del nodo è vincolante per l'indirizzo IP di loopback 127.0.0.1anziché per "tutti gli IP" 0.0.0.0poiché si tratta del comportamento predefinito di listen. Specifica sia la porta che l'IP nella tua chiamata server.listen(80, '0.0.0.0');e riprova.


3
Se lo faccio, non riesco ancora ad accedere al Nodo su nessun altro dispositivo sulla mia LAN. Il mio codice è simile al seguente: var io = require ('socket.io'); var express = request ("express"); var app = express (); var server = request ('http'). createServer (app) io = io.listen ('80 ',' 0.0.0.0 ');
Joel Murphy,

2
Questo ha funzionato nel mio caso. Su alcune reti wireless localhostfunziona come una stringa, ma in altre devi digitarla come127.0.0.1
Raul Rene,

Ciò non è corretto alla luce della domanda attualmente scritta, poiché in realtà è possibile accedervi sul computer locale utilizzando l'indirizzo LAN, il che significa che sta ascoltando anche su quell'indirizzo.
Arlen Beiler,

6

Ottieni il tuo attuale IP di rete locale ed esegui il server http in questo modo:

server.listen(80, 'current_local_ip');

1
questo funziona per me.
psulek,

I documenti di NodeJS affermano che se non viene specificato alcun IP, questo ascolterà su carattere jolly (nell'ordine: ::o 0.0.0.0)
Arlen Beiler,

3

Innanzitutto, è necessario aggiungere C:\Program Files (x86)\nodeall'elenco delle applicazioni attendibili nel firewall.

Quindi, nell'app del nodo, puoi scrivere:

listen(3333, '172.24.14.26', function() {

o:

listen(3333, '0.0.0.0', function() {

o:

listen(3333, function() {

o:

listen(80, '172.24.14.26', function() {

o:

listen(80, '0.0.0.0', function() {

o:

listen(80, function() {

Ognuna di queste 6 combinazioni funziona nel mio caso: node.js su Windows Server 2016, protetto da un proxy aziendale.


3

Seguire ha funzionato per me su un PC Windows. Prova questo: apri

Pannello di controllo \ Sistema e sicurezza \ Windows Defender Firewall \ App consentite

Quindi cerca node.js nell'elenco e fai clic su Modifica impostazioni> Assicurati che l'accesso privato sia selezionato, quindi fai clic su OK.


3

Ho trovato una buona soluzione per questo problema. Invece di fare tutte le configurazioni (Impostazione del firewall, porta di inoltro, ecc.) Ho usato localtunnel che è un'utilità per esporre il server del nodo locale su Internet. Puoi usarlo per lo sviluppo, il collaudo, lo scopo di condivisione, semplicemente non utilizzarlo per la produzione.

Innanzitutto devi installare localtunnel come segue:

$npm install -g localtunnel

Successivamente, configura l'app del nodo in modo tale che il server del nodo sia in esecuzione su localhost. Per esempio:

server.listen(3000, function () {
console.log('Listening to port:  ' + port);
});

Annotare your_port che nel mio caso è stato 3000 , e avviare il server del nodo.

Apri un altro terminale e digita il seguente comando per eseguire localtunnel.

$lt --port 3000

Successivamente, nel terminale otterrai un URL che puoi utilizzare a scopo di sviluppo / test. Questo URL sarà disponibile su Internet in modo da poterlo condividere anche con altri. Finché il localtunnel è in esecuzione, altri possono accedere al server del nodo locale.

Per ulteriori opzioni di configurazione / aiuto è possibile consultare la documentazione: https://www.npmjs.com/package/localtunnel

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.