คู่มือนี้จะอธิบายการแก้ไขที่เป็นไปได้สำหรับ “listen EADDRINUSE: ที่อยู่มีการใช้งานแล้ว” โดยครอบคลุมหัวข้อด้านล่าง:
- วิธีแก้ไข “ข้อผิดพลาด: ฟัง EADDRINUSE: ที่อยู่ถูกใช้แล้ว”
- โซลูชันที่ 1: เรียกใช้กระบวนการบนพอร์ตที่ต่างกัน
- โซลูชันที่ 2: การหยุดกระบวนการที่ทำงานบนพอร์ตเดียวกัน
- วิธีที่ 1: ใช้โมดูล 'kill-port' หลังการติดตั้ง
- วิธีที่ 2: ใช้โมดูล 'kill-port' โดยไม่ต้องติดตั้ง
- เคล็ดลับโบนัส: การถอนการติดตั้งโมดูล “kill-port”
- โซลูชันที่ 3: ยุติบริการ Node.js บน Windows
- การใช้แนวทาง CLI
- การใช้แนวทาง GUI
- บทสรุป
วิธีแก้ไข “ข้อผิดพลาด: ฟัง 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: ที่อยู่ถูกใช้งานแล้ว”