Kaip ištaisyti klaidą: klausytis EADDRINUSE naudojant nodejs?

Jei paleidžiu serverį su 80 prievadu ir bandau naudoti xmlHTTPrequest, gaunu šią klaidą: Error: listen EADDRINUSE.

Kodėl nodejs kyla problemų, jei noriu atlikti užklausą, o paleidžiu serverį 80 prievadu? Interneto naršyklėms tai nėra problema: galiu naršyti internete, kol veikia serveris.

Serveris yra:

  net.createServer(function (socket) {
    socket.name = socket.remoteAddress + ":" + socket.remotePort;
    console.log('connection request from: ' + socket.remoteAddress);
    socket.destroy();
  }).listen(options.port);

Ir užklausa:

var xhr = new XMLHttpRequest();

xhr.onreadystatechange = function() {
    sys.puts("State: " + this.readyState);

    if (this.readyState == 4) {
        sys.puts("Complete.\nBody length: " + this.responseText.length);
        sys.puts("Body:\n" + this.responseText);
    }
};

xhr.open("GET", "http://mywebsite.com");
xhr.send();
Sprendimas

EADDRINUSE reiškia, kad prievado numeris, su kuriuo listen() bando susieti serverį, jau yra naudojamas.

Taigi, jūsų atveju 80 prievado prievadas jau turi būti naudojamas.

Jei šiame prievade veikia kitas žiniatinklio serveris, turite įdiegti node.js už šio serverio ir per jį perduoti jį per tarpininką.

Turėtumėte patikrinti listening įvykį, kad pamatytumėte, ar serveris tikrai klausosi:

var http=require('http');

var server=http.createServer(function(req,res){
    res.end('test');
});

server.on('listening',function(){
    console.log('ok, server is running');
});

server.listen(80);
Komentarai (3)

Tiesiog įspėjame, kad "Skype" kartais klausosi 80 prievado ir todėl sukelia šią klaidą, jei bandote klausytis 80 prievado iš "Node.js" ar bet kurios kitos programos.

Šį elgesį galite išjungti "Skype" programoje, jei spustelėsite parinktis Advanced -> Connection -> Use port 80 (panaikinkite žymėjimą).

P.S. Atlikę šį pakeitimą, nepamirškite iš naujo paleisti "Skype"!

Komentarai (5)

Šią klaidą esu matęs anksčiau (mazge) su http.client, ir, kiek pamenu, problema buvo susijusi su httpClient neinicializavimu arba blogų parinkčių nustatymu kuriant httpClient ir (arba) url užklausoje.

Komentarai (1)