首頁  >  文章  >  web前端  >  為什麼 Node.js 使用 XMLHttpRequest 時會拋出「Error: Listen EADDRINUSE」?

為什麼 Node.js 使用 XMLHttpRequest 時會拋出「Error: Listen EADDRINUSE」?

Barbara Streisand
Barbara Streisand原創
2024-11-27 19:51:10783瀏覽

Why Does Node.js Throw

解決Node.js 中的錯誤:監聽EADDRINUSE

當Node.js 遇到嘗試時,會出現「錯誤:監聽EADDRINUSE ”問題偵聽已佔用的連接埠。 Node.js 是用於執行 JavaScript 應用程式的執行環境。

在提供的場景中,伺服器正在偵聽連接埠 80,同時嘗試使用 XMLHttpRequest 進行請求。瀏覽器可以處理並發連接,但 Node.js 伺服器由於連接埠不可用而面臨問題。

伺服器程式碼,如前所述:

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

伺服器本質上是在偵聽傳入的連接連接,但立即破壞它們。這會阻止處理任何實際請求。

提供的請求代碼:

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();

該請求正在嘗試向遠端網站發出 HTTP GET 請求,而 Node.js伺服器正在連接埠 80 上執行。

要解決“錯誤:監聽EADDRINUSE”,伺服器應該任一:

  • 使用不同的連接埠: 伺服器可以偵聽不同的連接埠,例如8080個連接埠,允許XMLHttpRequest 請求在連接埠80 上繼續。
  • 停止伺服器:如果伺服器需要在連接埠 80 上運行,則應該在執行之前停止它XMLHttpRequest 請求。常見的方法是使用killall -9節點來終止Node.js進程。
  • 使用代理伺服器:代理伺服器可用於處理傳入連線並將請求轉送至Node .js 伺服器。這允許多個應用程式使用同一連接埠。

以上是為什麼 Node.js 使用 XMLHttpRequest 時會拋出「Error: Listen EADDRINUSE」?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn