2017-04-26 1 views
0

ich eine socket.io Knoten Datei, die wie folgt beginnt ...Lauf sockets.io in Knoten ohne sudo Zugang

//sockets/server 
var app = require('http').createServer(handler) 
var io = require('socket.io')(app); 
var fs = require('fs'); 
app.listen(80); //the 5th line that the error refers to 

Wenn ich von der Konsole mit „Knoten myFile.js“ laufen bekomme ich das folgende Fehler ...

events.js:85 
     throw er; // Unhandled 'error' event 
      ^
Error: listen EACCES 
    at exports._errnoException (util.js:746:11) 
    at Server._listen2 (net.js:1112:19) 
    at listen (net.js:1155:10) 
    at Server.listen (net.js:1240:5) 
    at Object.<anonymous> (/home/myUser/node/myFile.js:5:5) 
    at Module._compile (module.js:460:26) 
    at Object.Module._extensions..js (module.js:478:10) 
    at Module.load (module.js:355:32) 
    at Function.Module._load (module.js:310:12) 
    at Function.Module.runMain (module.js:501:10) 

ich kann leicht um den Fehler auf meinem lokalen Rechner bekommen (MAMP) von ‚sudo‘ zu Beginn des Befehls hinzufügen, aber mein Hosting-Provider wird mich nicht, dass auf tun lassen die Produktionsumgebung.

Hat jemand eine Idee von einem Weg, um den Fehler zu beheben (oder sogar wissen, was es bedeutet), im Gegensatz zu sudoing es aus dem Weg?

+1

Mögliche Duplikat [Node.js EACCES Fehler, wenn sie auf den meisten Häfen hören] (http://stackoverflow.com/questions/9164915/node-js-eacces-error-when-listening-on -most-ports) –

+0

Danke Ben - du hast Recht - ich weiß nicht, wie ich diesen Beitrag nicht gefunden habe, aber er beschreibt die richtige Herangehensweise, die für mich perfekt funktioniert hat (wie auch die Antwort von Tatsuyuki, die ich unten geschrieben habe werde in Kürze akzeptieren). – d3wannabe

+0

Sie können Ihren Server auch an einem Port mit höherer Nummer ausführen, für den diese höheren Berechtigungen nicht erforderlich sind (so müssen Sie Ihrem Server keine Root-Berechtigungen erteilen). Verwenden Sie dann die IPTable-Konfiguration, um Port 80 an Ihre höhere Portnummer umzuleiten. Ich mache dies auf meinem Raspberry Pi, um meinen Serverprozess nicht mit höheren Privilegien auszustatten, aber Port 80 wird erfolgreich bedient. – jfriend00

Antwort

0

Port 80 ist ein privilegierter Port, und Sie müssen root oder CAP_NET_ADMIN binden.

Die Lösungen sind:

  1. nicht auf Port 80 für die Entwicklung binden.

  2. Konfigurieren Sie Ihr System so, dass der Port als normaler Benutzer verwendet werden kann. Siehe: https://superuser.com/questions/710253/allow-non-root-process-to-bind-to-port-80-and-443

+0

Wow, spam downvoter :( –

+0

Ja, naja, du hast trotzdem meinen upvote - danke für die Antwort - I wählte 8080 und es funktioniert perfekt - wird die Antwort in Kürze akzeptieren ... – d3wannabe