Je teste une application (j'espère qu'elle fonctionne sur Heroku, mais j'ai aussi des problèmes localement). Cela me donne une erreur EACCES lorsqu'il exécute http.Server.listen () - mais cela ne se produit que sur certains ports.
Donc, localement, je cours:
joe@joebuntu:~$ node
> var h = require('http').createServer();
> h.listen(900);
Error: EACCES, Permission denied
at Server._doListen (net.js:1062:5)
at net.js:1033:14
at Object.lookup (dns.js:132:45)
at Server.listen (net.js:1027:20)
at [object Context]:1:3
at Interface.<anonymous> (repl.js:150:22)
at Interface.emit (events.js:42:17)
at Interface._onLine (readline.js:132:10)
at Interface._line (readline.js:387:8)
at Interface._ttyWrite (readline.js:564:14)
Je n'ai rien en cours d'exécution sur le port 900 (ou l'un des 20 autres ports que j'ai essayés), donc cela devrait fonctionner. La partie étrange est qu'il fait le travail sur certains ports. Par exemple, le port 3000 fonctionne parfaitement.
Qu'est-ce qui provoquerait cela?
Mise à jour 1:
J'ai compris que sur mon ordinateur local, l'erreur EACCES venait car je dois exécuter le nœud en tant que root afin de me lier à ces certains ports. Je ne sais pas pourquoi cela se produit, mais l'utilisation de sudo le corrige. Cependant, cela n'explique pas comment je le corrigerais sur Heroku. Il n'y a aucun moyen de s'exécuter en tant que root sur Heroku, alors comment puis-je écouter sur le port 80?
la source
Réponses:
Fonctionnement sur votre poste de travail
En règle générale, les processus exécutés sans privilèges root ne peuvent pas se lier aux ports inférieurs à 1024.
Essayez donc un port supérieur ou exécutez-le avec des privilèges élevés via
sudo
. Vous pouvez rétrograder les privilèges après vous être lié au port bas en utilisantprocess.setgid
etprocess.setuid
.Courir sur Heroku
Lorsque vous exécutez vos applications sur heroku, vous devez utiliser le port comme spécifié dans la variable d'environnement PORT.
Voir http://devcenter.heroku.com/articles/node-js
la source
crossdomain.xml
via le port 843.L'utilisateur non privilégié (pas root) ne peut pas ouvrir de socket d'écoute sur les ports inférieurs à 1024.
la source
sudo
exécuter un serveur express en utilisant le nœud (gulp en fait). DoncVérifiez ce lien de référence :
la source
pm2 kill
et recréez-le.Une autre approche consiste à effectuer une redirection de port:
Et exécutez votre serveur sur un port> 1024:
ps la même chose pourrait être faite pour le port https (443) en passant.
la source
Cela signifie que le nœud n'est pas en mesure d'écouter sur le port défini. Remplacez-le par quelque chose comme 1234 ou 2000 ou 3000 et redémarrez votre serveur.
la source
OMG!! Dans mon cas, je faisais
....listen(ip, port)
au lieu de...listen(port, ip)
et cela lançait le message d'erreur:Error: listen EACCES localhost
J'utilisais des numéros de port> = 3000 et j'ai même essayé avec un accès administrateur. Rien n'a fonctionné. Puis avec un relookage plus proche, j'ai remarqué le problème. Changé en
...listen(port, ip)
et tout a commencé à bien fonctionner !!J'appelle cela au cas où cela serait utile à quelqu'un d'autre ...
la source
....listen(ip, port)
dans votre réponse (avec quatre.
)? Il m'a fallu une minute pour réaliser que vous parliez de l'ordre des arguments à cause de cela.....
(quatre points) là, ce que je pensais était évident.J'ai eu cette erreur sur mon mac car il exécutait le serveur apache par défaut en utilisant le même port que celui utilisé par le serveur de noeud qui dans mon cas était le port 80. Tout ce que j'avais à faire était de l'arrêter avec
sudo apachectl stop
J'espère que cela aide quelqu'un.
la source
J'ai aussi cette erreur sur mon mac. J'utilise
npm run dev
pour exécuter mon application Nodejs dans Windows et cela fonctionne bien. Mais j'ai eu cette erreur sur mon mac -error given was: Error: bind EACCES null:80
.Une façon de résoudre ce problème est de l'exécuter avec un accès root. Vous pouvez utiliser
sudo npm run dev
et aurez besoin de votre mot de passe.Il est généralement préférable de servir votre application sur un port non privilégié, tel que 3000, qui fonctionnera sans autorisations root.
référence: erreur Node.js EACCES lors de l'écoute sur le port http 80 (autorisation refusée)
la source
J'ai eu un problème similaire qu'il refusait de fonctionner sur le port 8080, mais aussi sur tout autre.
Il s'avère que c'était parce que le
env.local
fichier qu'il lisait contenait des commentaires après les noms de variables comme:Et il l'a interprété comme ça, en essayant d'utiliser le port "
8080 # The port the server runs at
", qui est évidemment un port invalide (-1). La suppression des commentaires l'a entièrement résolu.À propos, Windows 10 et Git Bash.
Je sais que ce n'est pas exactement le problème décrit ici, mais cela pourrait aider quelqu'un là-bas. J'ai atterri sur cette question à la recherche du problème pour ma réponse, alors ... peut-être?
la source
N'oubliez pas que si vous utilisez sudo pour vous lier au port 80 et que vous utilisez les variables env PORT & NODE_ENV, vous devez réexporter ces variables car vous êtes maintenant sous le profil racine et non votre profil utilisateur. Donc, pour que cela fonctionne sur mon Mac, j'ai fait ce qui suit:
la source
cela se produit si le port que vous essayez d'héberger localement est portfowarded
la source
Essayez authbind:
http://manpages.ubuntu.com/manpages/hardy/man1/authbind.1.html
Après l'installation, vous pouvez ajouter un fichier avec le nom du numéro de port que vous souhaitez utiliser dans le dossier suivant: / etc / authbind / byport /
Donnez-lui 500 autorisations à l'aide de chmod et modifiez la propriété de l'utilisateur sous lequel vous souhaitez exécuter le programme.
Après cela, faites "authbind node ..." en tant qu'utilisateur dans votre projet.
la source
Mon erreur a été résolue simplement en changeant le numéro de port dans server.js Surtout dans cette ligne
J'ai changé mon numéro de port en 8085 de 8080.
J'espère que ça aide.
la source
Après avoir essayé de nombreuses façons différentes, la réinstallation d'IIS sur mes fenêtres a résolu le problème.
la source
Mon erreur est résolue à l'aide de (Sous Windows)
Autorisez l'application NodeJS à accéder au réseau dans le pare-feu Windows.
la source
redémarrer ne suffisait pas! La seule façon de résoudre le problème est la suivante:
Vous devez tuer le service qui s'exécute sur ce port.
à cmd, exécutez en tant qu'administrateur, puis tapez: netstat -aon | trouver / i "écouter"
alors vous obtiendrez une liste avec le service actif, recherchez le port qui s'exécute à 4200 et utilisez l'ID de processus qui est la dernière colonne pour le tuer par
: taskkill / F / PID 2652
la source