web-dev-qa-db-fra.com

Comment d'autres personnes, sur un réseau local, pourraient-elles accéder à mon application NodeJS alors qu'elle est exécutée sur ma machine?

J'ai une question assez simple. J'ai créé un jeu Web avec NodeJS et je peux y jouer seul avec plusieurs fenêtres de navigateur ouvertes côte à côte. Cependant, j'aimerais savoir s'il est possible que d'autres machines locales puissent également accéder au jeu et y jouer avec moi.

J'ai naïvement essayé d'utiliser cette URL: my-ip-address:8000 et cela ne fonctionnera pas.

29
theabraham

votre serveur node.js s'exécute généralement sur un port déterminé à la fin du script. Parfois 3000. mais peut être n'importe quoi. La bonne façon d’accéder aux autres est, comme vous le dites….

http: //votre.network.ip.address: port/ par exemple . http://192.168.0.3:3000

vérifiez que vous avez le bon port - et l'adresse IP sur le réseau - pas Internet IP.

Sinon, les ports sont peut-être bloqués par votre routeur. Essayez d’utiliser 8080 ou 80 pour éviter ce problème - sinon, reconfigurez votre routeur.

39
Billy Moon

J'ai eu la même question et résolu le problème. Dans mon cas, le pare-feu Windows (pas le routeur) bloquait les E/S de la machine V8 sur la machine hôte.

  1. Aller au bouton Windows
  2. Recherchez "Firewall"
  3. Choisissez "Autoriser les programmes à communiquer via le pare-feu"
  4. Cliquez sur Modifier la configuration
  5. Cochez toutes les "Evented I/O pour V8 Javascript" OR "Node.js: Javascript côté serveur"

Mon hypothèse est que "Evented I/O for V8 Javascript" est le processus d'E/S que node.js communique avec le monde extérieur. Nous devons le libérer avant de pouvoir envoyer des paquets en dehors de l'ordinateur local. Après avoir permis à ce programme de communiquer via le pare-feu Windows, je pouvais utiliser tous les numéros de port pour écouter.

19
Sungsoo Koh

Si vous utilisez un routeur, alors:

  1. Remplacez server.listen(yourport, 'localhost'); par server.listen(yourport, 'your ipv4 address');

    dans ma machine c'est

    server.listen(3000, '192.168.0.3');
    
  2. Assurez-vous que votre port est transféré à votre adresse ipv4.

  3. Sur le pare-feu Windows, cochez toutes les réponses sur Node.js: JavaScript côté serveur.
13
aap

Problème similaire rencontré avec mon Angular Node Server (v6.10.3) qui s’est installé dans Windows 10 .http://localhost:4201 fonctionnait correctement dans localhost. Mais http://{ipaddress}:4201 ne fonctionne pas sur d’autres machines du réseau local.

Pour cela j'ai mis à jour le ng serve comme ceci 

//Older ng serve in windows command Prompt

ng serve --Host localhost --port 4201

//Updated ng serve
//ng serve --Host {ipaddress} --port {portno}
ng serve --Host 192.168.1.104 --port 4201

Après avoir effectué cette modification en mesure d’accéder à mon application sur d’autres machines du réseau appelant cette URL 

http://192.168.1.104:4201  
//http://{ipaddress}:4201
10
Geo V L

Le port est probablement bloqué par votre pare-feu ou votre routeur local. Difficile à dire sans détails.

Mais il existe une solution simple pour laquelle vous n'avez pas à vous soucier des règles de pare-feu, à exécuter le noeud en tant que processus privilégié à servir sur le port 80, etc.

Départ Localtunnel. C'est un excellent script/service Ruby, qui vous permet de rendre n'importe quel port local disponible sur Internet en quelques secondes. Ce n'est certainement pas utile pour une installation de production, mais pour essayer un jeu avec des collègues, ça devrait marcher!

4
alienhard

Et n'oubliez pas de changer dans Index.html le code suivant:

 <script src="http://192.168.1.4:8000/socket.io/socket.io.js"></script>
 <script src="http://code.jquery.com/jquery-1.6.2.min.js"></script>

 var socket = io.connect('http://192.168.1.4:8000');

Bonne chance!

2
RIYAZ
var http = require('http');
http.createServer(function (req, res) {
}).listen(80, '127.0.0.1');
console.log('Server running at http://127.0.0.1:80/');
1
Siddharth

Un conseil que personne n’a encore mentionné est d’héberger l’application à l’adresse 0.0.0.0 accessible par le réseau local au lieu de l’hôte local par défaut. Les pare-feu sur Mac et Linux sont moins stricts en ce qui concerne cette adresse par rapport à l'adresse par défaut de l'hôte localhost (172.0.0.1).

Par exemple,

gatsby develop --Host 0.0.0.0

yarn start --Host 0.0.0.0

npm start --Host 0.0.0.0

Vous pouvez ensuite accéder à l'adresse à laquelle vous connecter en entrant ifconfig ou ipconfig dans le terminal. Puis essayez l’une des adresses IP de gauche qui ne se termine pas par .255 ou .0.

1
Yatit Thakker

J'ai eu ce problème. La solution consistait à autoriser node.js via le pare-feu du serveur.

0
Anthony Cregan
const express = require('express');

var app = express();    
app.listen(Port Number, "Your IP Address");
// e.g.
app.listen(3000, "192.183.190.3");

Vous pouvez obtenir votre adresse IP en tapant ipconfig dans cmd si votre utilisateur Windows peut également utiliser ifconfig.

0
Rama

Par défaut, le nœud sera exécuté sur chaque adresse IP exposée par l'hôte sur lequel il s'exécute. Vous n'avez rien de spécial à faire. Vous saviez déjà que le serveur fonctionnait sur un port particulier. Vous pouvez le prouver en utilisant cette adresse IP sur un navigateur sur cette machine:

http://my-ip-address:port

Si cela ne fonctionnait pas, votre adresse IP pourrait être erronée.

0
Sumant Bagade