Daugiau
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();
437
3
EADDRINUSE
reiškia, kad prievado numeris, su kuriuolisten()
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: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ą).
Š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.