วิธีแก้ไข “ข้อผิดพลาด: ฟัง EADDRINUSE: ที่อยู่ถูกใช้แล้ว”

Withi Kaekhi Khx Phid Phlad Fang Eaddrinuse Thi Xyu Thuk Chi Laew



Node.js คือสภาพแวดล้อมรันไทม์ที่อนุญาตให้โค้ดที่เขียนด้วยภาษา JavaScript เพื่อดำเนินการบนเว็บเพจหรือเซิร์ฟเวอร์ท้องถิ่น เป็นสภาพแวดล้อมแบบเธรดเดียวและมีลักษณะแบบอะซิงโครนัส มีโมดูลในตัวและภายนอกมากมายที่สามารถใช้เพื่อดำเนินการต่างๆ เช่น การส่งคำขอ HTTP ผ่านเซิร์ฟเวอร์ ในขณะที่โต้ตอบกับเซิร์ฟเวอร์ภายในเครื่องต่างๆ ก็มีโอกาสที่จะได้รับข้อผิดพลาดหลายประการ ซึ่งแก้ไขได้โดยทำตามคำแนะนำเฉพาะ

คู่มือนี้จะอธิบายการแก้ไขที่เป็นไปได้สำหรับ “listen EADDRINUSE: ที่อยู่มีการใช้งานแล้ว” โดยครอบคลุมหัวข้อด้านล่าง:

วิธีแก้ไข “ข้อผิดพลาด: ฟัง EADDRINUSE: ที่อยู่ถูกใช้แล้ว”

ข้อผิดพลาด: ฟัง EADDRINUSE: มีการใช้งานที่อยู่นี้แล้ว ” เกิดขึ้นเมื่อแอปพลิเคชันหรืองานมากกว่าหนึ่งรายการพยายามเข้าถึงพอร์ตเดียวกัน ข้อผิดพลาดนี้อาจเกิดขึ้นได้ในระหว่างขั้นตอนการทดสอบหรือการพัฒนา ตัวอย่างเช่น ข้อผิดพลาดที่กล่าวมาข้างต้นจะถูกสร้างขึ้นเพื่อความเข้าใจที่ดีขึ้น:







ค่าคงที่ ด่วนObj = จำเป็นต้อง ( 'ด่วน' )
ค่าคงที่ แอพสาธิต = ด่วนObj ( )
แอพสาธิต รับ ( '/' , ( ร้องขอ, ตอบกลับ ) => {
ความละเอียด json.json ( {
ชื่อ : : 'บทความ Linux เกี่ยวกับ CORS' ,
ภาษา : : 'โหนด js' ,
แอปพลิเคชัน : : 'คอร์สแอพ' ,
ต้นทาง : : 'ข้ามกำเนิด' ,
มิดเดิลแวร์ : : 'คอร์'
} )
} )
แอพสาธิต ฟัง ( 8080 , ( ) => {
คอนโซล บันทึก ( `เซิร์ฟเวอร์เริ่มต้นขึ้น 'http://localhost:8080/' ` )
} )
แอพสาธิต ฟัง ( 8080 , ( ) => {
คอนโซล บันทึก ( `เซิร์ฟเวอร์เริ่มต้นขึ้น 'http://localhost:8080/' ` )
} )

ข้อมูลโค้ดด้านบนทำงานดังนี้:



  • ขั้นแรก นำเข้า ' ด่วน ” โมดูลและเก็บวัตถุไว้ในตัวแปรใหม่ “ ด่วนObj '. ใช้ตัวแปรนี้เป็นตัวสร้างเพื่อสร้างแอปพลิเคชันด่วนใหม่ชื่อ “ แอพสาธิต '.
  • จากนั้นสร้างคำขอ GET โดยใช้เครื่องหมาย “ รับ() ” วิธีการและตั้งค่าโฮมเพจเป็นตัวจัดการรูทโดยส่งผ่าน “ / ” เป็นพารามิเตอร์แรก พารามิเตอร์ที่สองคือฟังก์ชันโทรกลับแบบไม่ระบุชื่อที่ส่ง “ เจสัน ” ข้อมูลเป็นการตอบสนองต่อการใช้ “ เจสัน() ' วิธี.
  • หลังจากนั้นให้แอปนั้นทำงานผ่านหมายเลขพอร์ตเดียวกันของ “ 8080 ' สองครั้ง. การดำเนินการของพอร์ตเดียวกันสองครั้งนี้ทำให้เกิดข้อผิดพลาดดังกล่าว

ผลลัพธ์ที่สร้างขึ้นหลังจากการคอมไพล์โค้ดด้านบนแสดงข้อผิดพลาด 'ข้อผิดพลาด: ฟัง EADDRINUSE: ที่อยู่ที่ใช้งานแล้ว':







มีวิธีแก้ไขปัญหาสองประการหลักในการแก้ไขข้อผิดพลาดที่เกิดขึ้นในเอาต์พุตด้านบนซึ่งก็คือการเปลี่ยนหมายเลขพอร์ตหรือหยุดกระบวนการใดกระบวนการหนึ่งที่กำลังทำงานอยู่ แต่มีการแก้ไขอื่น ๆ อีกมากมายเช่นกันที่แก้ไขทางอ้อม “ ข้อผิดพลาด: ฟัง EADDRINUSE: มีการใช้งานที่อยู่นี้แล้ว ' ข้อผิดพลาด. แนวทางแก้ไขเหล่านี้พร้อมทั้งการสาธิตการใช้งานจริงมีดังนี้:

โซลูชันที่ 1: เรียกใช้กระบวนการบนพอร์ตที่ต่างกัน

วิธีแก้ปัญหาที่แนะนำมากที่สุดสำหรับข้อผิดพลาดดังกล่าวคือการระบุหมายเลขพอร์ตที่บริการทั้งสองทำงานอยู่เหมือนในกรณีของเราคือ “ 8080 '. จากนั้นเลือกบริการหนึ่งรายการแบบสุ่มและแก้ไขหมายเลขพอร์ตเพื่อให้บริการรับฟังบน localhost แต่มีหมายเลขพอร์ตต่างกัน รหัสของเราหลังจากการปรับเปลี่ยนที่กล่าวถึงแสดงไว้ด้านล่าง:



ค่าคงที่ ด่วนObj = จำเป็นต้อง ( 'ด่วน' )
ค่าคงที่ แอพสาธิต = ด่วนObj ( )
แอพสาธิต รับ ( '/' , ( ร้องขอ, ตอบกลับ ) => {
ความละเอียด json.json ( {
ชื่อ : : 'บทความ Linux เกี่ยวกับ CORS' ,
ภาษา : : 'โหนด js' ,
แอปพลิเคชัน : : 'คอร์สแอพ' ,
ต้นทาง : : 'ข้ามกำเนิด' ,
มิดเดิลแวร์ : : 'คอร์'
} )
} )
แอพสาธิต ฟัง ( 8080 , ( ) => {
คอนโซล บันทึก ( `เซิร์ฟเวอร์เริ่มต้นขึ้น 'http://localhost:8080/' ` )
} )
แอพสาธิต ฟัง ( 3000 , ( ) => {
คอนโซล บันทึก ( `เซิร์ฟเวอร์เริ่มต้นขึ้น 'http://localhost:8080/' ` )
} )

ผลลัพธ์ที่สร้างขึ้นหลังจากรันโค้ดข้างต้นแสดงว่าตอนนี้ “ ข้อผิดพลาด: ฟัง EADDRINUSE: มีการใช้งานที่อยู่นี้แล้ว ” ปัญหาได้รับการแก้ไขแล้ว:

โซลูชันที่ 2: การหยุดกระบวนการที่ทำงานบนพอร์ตเดียวกัน

อีกวิธีหนึ่งในการแก้ไขข้อผิดพลาด “listen EADDRINUSE: ที่อยู่ที่ใช้งานแล้ว” คือการหยุดกระบวนการที่ทำงานบนพอร์ตเฉพาะที่มีการใช้งานอยู่แล้ว สิ่งนี้จะทำให้พอร์ตไม่ได้ใช้งานซึ่งนักพัฒนาสามารถเข้าถึงได้เพื่อทำงานที่ระบุ กระบวนการหยุดนี้เสร็จสิ้นด้วยความช่วยเหลือของโมดูลภายนอกชื่อ “ ฆ่าพอร์ต '.

เช่น กระบวนการทั้งหมดที่ทำงานบนหมายเลขพอร์ตที่ระบุ “ 8080 ” กำลังจะถูกฆ่าโดยใช้ “ ฆ่าพอร์ต ' โมดูล. มีสองวิธีในการใช้โมดูล 'kill-port' และทั้งสองวิธีมีการระบุไว้ด้านล่าง:

วิธีที่ 1: ใช้โมดูล 'kill-port' หลังการติดตั้ง

ฆ่าพอร์ต ” module เป็นโมดูลภายนอกของบุคคลที่สามและเพื่อใช้โมดูลนี้ภายในโปรเจ็กต์ node.js ต้องดาวน์โหลดโมดูลนี้ก่อนโดยดำเนินการคำสั่งที่ระบุด้านล่าง:

ฆ่าการติดตั้ง npm - - ท่าเรือ - -

รูปด้านล่างแสดงการติดตั้งเสร็จสมบูรณ์สำหรับ “ ฆ่าพอร์ต ' ตัวแปร:

หลังการติดตั้ง ผู้ใช้สามารถปิดบริการตามหมายเลขพอร์ตที่ต้องการได้ ในกรณีของเราบริการของหมายเลขพอร์ต” 8080 ” จะถูกฆ่าด้วยคำสั่งด้านล่าง:

ฆ่า - - ท่าเรือ -- ท่าเรือ 8080

ผลลัพธ์ด้านล่างยืนยันว่าบริการทั้งหมดสำหรับพอร์ต “ 8080 ” ถูกฆ่าตาย:

วิธีที่ 2: ใช้โมดูล 'kill-port' โดยไม่ต้องติดตั้ง

ฆ่าพอร์ต ” โมดูลสามารถใช้งานได้โดยไม่ต้องผ่านขั้นตอนการติดตั้งโดยใช้ “ npx ” รองชนะเลิศอันดับแพ็คเกจ ตัวอย่างเช่น “ ฆ่าพอร์ต ” โมดูลถูกใช้เพื่อฆ่าสองพอร์ตที่ระบุโดยใช้คำสั่งตัวรันแพ็คเกจ “npx” ที่ระบุไว้ด้านล่าง:

npx ฆ่า - - ท่าเรือ 8080 9000

ผลลัพธ์ด้านล่างแสดงให้เห็นว่าบริการสำหรับพอร์ตที่ระบุ “ 9000 ' และ ' 8080 ” ถูกฆ่าตาย:

เคล็ดลับโบนัส: การถอนการติดตั้งโมดูล “kill-port”

เพื่อถอนการติดตั้ง “ ฆ่าพอร์ต ” โมดูลทั่วโลกจากระบบรันคำสั่งที่ระบุด้านล่าง:

npm ถอนการติดตั้ง kill - - ท่าเรือ - -

โซลูชันที่ 3: ยุติบริการ Node.js บน Windows

หาก “ข้อผิดพลาด: ฟัง EADDRINUSE: ที่อยู่ถูกใช้แล้ว” ยังคงมีอยู่ ให้ฆ่าการทำงานทั้งหมดที่ทำงานอยู่ “ node.js ” บริการโดยใช้แนวทาง GUI หรือ CLI

การใช้แนวทาง CLI

กด ' หน้าต่าง ” เพื่อเปิดแถบค้นหาและป้อนคำว่า “ ซีเอ็มดี ” ภายในช่องค้นหาจากผลลัพธ์ที่สร้างขึ้น จากนั้นเลือก ' พร้อมรับคำสั่ง ” จากนั้นกดปุ่ม “ ทำงานในฐานะผู้ดูแลระบบ ' ปุ่ม:

เมื่อเลือกตัวเลือกนี้ หน้าต่างใหม่ของ Control Prompt จะปรากฏขึ้น เพื่อปิดบริการ “node.js” ที่กำลังทำงานอยู่ในเบื้องหลัง ให้ดำเนินการคำสั่งด้านล่าง:

ภารกิจฆ่า / เอฟ / โหนด IM อดีต

ผลลัพธ์ที่สร้างขึ้นแสดงให้เห็นว่าบริการ 'node.js' ถูกยกเลิก:

การใช้แนวทาง GUI

หากต้องการหยุดบริการ node.js ที่ทำงานอยู่จากระบบ ให้เปิด “ ผู้จัดการงาน ” โดยกดปุ่ม “ Ctrl + Shift + Esc ” คีย์ทันที หลังจากเปิด “ตัวจัดการงาน” แล้ว ให้ข้ามไปที่ “ รายละเอียด ” ให้เลือก “ node.exe ” บริการ และกดปุ่ม “ งานสิ้นสุด ปุ่ม ” อยู่ที่มุมขวาล่าง ดังที่แสดงด้านล่าง:

นั่นคือทั้งหมดที่เกี่ยวกับการแก้ไข “ข้อผิดพลาด: ฟัง EADDRINUSE: ที่อยู่ถูกใช้งานแล้ว” ใน Node.js

บทสรุป

“ข้อผิดพลาด: ฟัง EADDRINUSE: ที่อยู่ถูกใช้แล้ว” เกิดขึ้นเมื่อบริการมากกว่าหนึ่งรายการพยายามใช้พอร์ตเดียวในเวลาเดียวกัน เพื่อแก้ไขปัญหา ผู้ใช้ควรลองใช้หมายเลขพอร์ตอื่นหรือปิดบริการที่ทำงานบนหมายเลขพอร์ตที่ระบุโดยใช้เครื่องหมาย “ ฆ่าพอร์ต ' โมดูล. หากข้อผิดพลาดยังไม่ได้รับการแก้ไข ให้ฆ่าทั้งหมดที่ทำงานอยู่” node.js ” จากตัวจัดการงานและรีสตาร์ทแอปพลิเคชันของคุณ คู่มือนี้ได้อธิบายวิธีแก้ปัญหาที่เป็นไปได้ในการแก้ไขปัญหา “ข้อผิดพลาด: ฟัง EADDRINUSE: ที่อยู่ถูกใช้งานแล้ว”