ฉันไม่เคยมีปัญหานี้เมื่อใช้ Windows
ด้วยเหตุผลบางประการ ฉันไม่สามารถรับผลกระทบใดๆ ก็ตามเมื่อพยายามเชื่อมต่อกับฐานข้อมูล MySQL ในเครื่องจากแอป Node.js ในเครื่อง
ทุกอย่างทำงานได้ในโค้ดจนถึงการพยายามเชื่อมต่อกับ MySQL
และทุกอย่างสามารถตรวจสอบย้อนกลับได้อย่างดี (สมมติว่ามีการใส่การกำหนด stub เพื่อทดแทนผลลัพธ์ที่ขาดหายไปจากการเรียก MySQL) หลังจากการเชื่อมต่อ MySQL
ฉันดูที่บันทึกของระบบและบันทึก MySQL อย่างไร้ประโยชน์เพื่อหาเงื่อนงำใด ๆ บางครั้งก็แนะนำว่า MySQL อาจปฏิเสธการเชื่อมต่อผ่านเครือข่าย แต่ใช้การเชื่อมต่อซ็อกเก็ตแทน ฉันปรับพารามิเตอร์การเชื่อมต่อตามนั้น (ไม่มีพอร์ต: ...., เพิ่ม socketPath: ....., รายการ) แต่ก็ไม่ดีขึ้น
ด้านล่างนี้เป็นรหัสทดสอบพื้นฐานสำหรับ
const mysql = ต้องการ ('mysql');
constqueryNodeAppData = (แบบสอบถาม) =>
{
console.log("ในสคริปต์ MySQL Query ตอนนี้ ...")
console.log("แบบสอบถาม:" + แบบสอบถาม);
const con = mysql.createConnection(
{
โฮสต์: "localhost",
socketPath: '/var/run/mysqld/mysqld.sock',
ฐานข้อมูล: "nodeapp",
ผู้ใช้: "รูท",
รหัสผ่าน: "My.$qu3@1$y"
});
con.connect (ฟังก์ชั่น (errconn)
{
ถ้า (เออคอนน์)
{
console.error('เกิดข้อผิดพลาดในการเชื่อมต่อ:' + errconn.stack);
กลับ "ไม่ถูกต้อง";
}
อื่น
{
console.log('เชื่อมต่อเป็น id' + connection.threadId);
ส่งคืน "ถูกต้อง"
}
});
};
module.exports = { แบบสอบถามNodeAppData };
เอาต์พุตเทอร์มินัลที่สอดคล้องกันหลังจากพยายามเรียกใช้แอพด้วย โหนด อยู่ด้านล่าง
บันทึกคอนโซลถูกสร้างขึ้นเมื่อ app.js มอบหมายงานผู้ใช้ให้กับโมดูลอื่น เช่น เราเตอร์, ตัวจัดการ, ตัวตรวจสอบรูปแบบ, mysql และอื่น ๆ บางครั้งเอาต์พุตจะถูกบันทึก
ข้อผิดพลาดในท้ายที่สุดที่ทำให้แอปขัดข้องนั้นเกิดจากการพยายามเขียนค่าที่ไม่ได้กำหนดลงในตัวแปรตอบสนอง XHR ที่กำหนดโดยข้อความ การระงับการตอบกลับด้วยสตริงใด ๆ ทำให้แอปส่งคืนรหัสสถานะ 200 และไม่มีข้อผิดพลาด
[nodemon] เริ่มต้น `node app.js`
HTTP Server สำหรับ NodeApp เริ่มต้นที่พอร์ต 3000
เราอยู่ในส่วนหลังสุดของ NodeApp !
มีคน POSTed ข้อมูลไปยัง Node server ...
ปลายทางที่ตัดแต่ง URL: reg-user
ค่าอินพุต: tamjk
ใน router.js ตอนนี้ ...
ปลายทาง: ข้อมูลผู้ใช้ reg: tamjk
ตัวจัดการ: authen.js
ในตัวจัดการ authen.js ตอนนี้ ...
โหมด: reg ฟิลด์: ค่าผู้ใช้: tamjk
ในการตรวจสอบรูปแบบในขณะนี้ ...
ข้อความตรวจสอบรูปแบบ: รูปแบบที่ถูกต้อง
กำลังเชื่อมต่อกับฐานข้อมูลผู้ใช้ ตรวจสอบ user ...
ในสคริปต์ MySQL Query ตอนนี้ ...
ข้อความค้นหา: เลือกผู้ใช้จากผู้ใช้ โดยที่ผู้ใช้ = 'tamjk'
เราเตอร์ส่งคืนข้อความ undefined
ข้อความโทรกลับ: ไม่ได้กำหนด
ข้อความ: undefined
ส่งการตอบกลับ: ไม่ได้กำหนด
_http_outgoing.js:696
โยนใหม่ ERR_INVALID_ARG_TYPE('อาร์กิวเมนต์แรก'
^
TypeError [ERR_INVALID_ARG_TYPE]: อาร์กิวเมนต์แรกต้องเป็นประเภทสตริงหรืออินสแตนซ์ของ Buffer หรือ Uint8Array ได้รับไม่ได้กำหนด
ที่เขียน_ (_http_outgoing.js:696:11)
ที่ ServerResponse.write (_http_outgoing.js:661:15)
ที่ reqCallback (/home/sandbar/Desktop/nodeapp-local/app.js:116:6)
ที่ข้อความขาเข้า <ไม่ระบุตัวตน> (/home/sandbar/Desktop/nodeapp-local/app.js:87:10)
ที่ IncomingMessage.emit (events.js:327:22)
ที่ endReadableNT (_stream_readable.js:1327:12)
ที่ processTicksAndRejections (ภายใน/กระบวนการ/task_queues.js:80:21) {
รหัส: 'ERR_INVALID_ARG_TYPE'
}
แอป [nodemon] ขัดข้อง - กำลังรอการเปลี่ยนแปลงไฟล์ก่อนที่จะเริ่ม...
เช่นเดียวกับปัญหาข้างต้น ฉันเริ่มไม่ได้รับความร่วมมือเมื่อฉันพยายามเข้าถึงฐานข้อมูล MySQL จากเทอร์มินัล
$ sudo mysql
[sudo] รหัสผ่านสำหรับแซนด์บาร์:
ข้อผิดพลาด 1045 (28000): การเข้าถึงถูกปฏิเสธสำหรับผู้ใช้ 'root'@'localhost' (โดยใช้รหัสผ่าน: NO)
สรุปแล้วฉันสงสัยว่า Ubuntu 20.04.2 และ MySQL 8.0.27 นั้นทำงานร่วมกันได้จริงหรือไม่