Tôi chưa bao giờ gặp sự cố này khi sử dụng Windows.
Vì một số lý do, tôi không thể nhận được bất kỳ tác dụng nào khi cố gắng kết nối với cơ sở dữ liệu MySQL cục bộ từ ứng dụng Node.js cục bộ.
Mọi thứ hoạt động rõ ràng trong mã cho đến khi thử kết nối với MySQL.
Và mọi thứ đều hoạt động tốt (giả sử một phép gán sơ khai được chèn vào để thay thế cho kết quả bị thiếu từ lệnh gọi MySQL) sau khi kết nối MySQL.
Tôi đã vô vọng xem Nhật ký hệ thống và nhật ký MySQL để tìm bất kỳ manh mối nào. Tìm kiếm trên Google đôi khi gợi ý rằng MySQL có thể đang từ chối kết nối qua mạng mà thay vào đó sử dụng kết nối ổ cắm. Tôi đã điều chỉnh các tham số kết nối cho phù hợp (không có cổng: ...., đã thêm socketPath: ....., mục nhập) nhưng không khá hơn.
Dưới đây là mã kiểm tra cơ bản cho
const mysql = yêu cầu('mysql');
const queryNodeAppData = (truy vấn) =>
{
console.log("Trong tập lệnh Truy vấn MySQL ngay bây giờ ...")
console.log("Truy vấn: " + truy vấn);
const con = mysql.createConnection(
{
máy chủ lưu trữ: "máy chủ cục bộ",
socketPath: '/var/run/mysqld/mysqld.sock',
cơ sở dữ liệu: "nút ứng dụng",
người dùng: "gốc",
mật khẩu: "My.$qu3@1$y"
});
con.connect(chức năng(errconn)
{
nếu (lỗi)
{
console.error('Lỗi kết nối: ' + errconn.stack);
trả về "Không hợp lệ";
}
khác
{
console.log('Đã kết nối dưới dạng id ' + connection.threadId);
trả về "Hợp lệ;"
}
});
};
module.exports = { queryNodeAppData };
Đầu ra thiết bị đầu cuối tương ứng sau khi thử chạy ứng dụng với gật gù là bên dưới.
Nhật ký bảng điều khiển được tạo khi tác vụ người dùng được app.js ủy quyền cho các mô-đun khác, ví dụ: bộ định tuyến, trình xử lý, trình kiểm tra định dạng, mysql, v.v. Các đầu ra đôi khi được ghi lại.
Lỗi cuối cùng khiến ứng dụng bị treo hoàn toàn là do cố gắng ghi một giá trị không xác định vào biến phản hồi XHR được xác định bằng văn bản. Việc cắt bỏ phản hồi bằng bất kỳ chuỗi nào sẽ khiến ứng dụng trả về mã trạng thái 200 và không có lỗi.
[gật đầu] bắt đầu `nút app.js`
Máy chủ HTTP cho NodeApp bắt đầu tại cổng 3000
Chúng ta đang ở phần cuối của NodeApp!
Ai đó đã POST dữ liệu lên máy chủ Node ...
Điểm cuối đã cắt URL: người dùng đăng ký
Giá trị đầu vào: tamjk
Trong router.js bây giờ ...
Điểm cuối: dữ liệu người dùng đăng ký: tamjk
Trình xử lý: authen.js
Trong trình xử lý authen.js bây giờ ...
Chế độ: reg Trường: người dùng Giá trị: tamjk
Trong xác thực định dạng bây giờ ...
Thông báo xác thực định dạng: Định dạng hợp lệ
Kết nối với cơ sở dữ liệu người dùng kiểm tra người dùng ...
Trong tập lệnh truy vấn MySQL bây giờ ...
Truy vấn: CHỌN người dùng TỪ người dùng WHERE user = 'tamjk'
Thông báo trả về của bộ định tuyến không xác định
Tin nhắn gọi lại: không xác định
Tin nhắn: không xác định
Phản hồi đã gửi lại: không xác định
_http_outgoing.js:696
ném ERR_INVALID_ARG_TYPE mới ('đối số đầu tiên',
^
TypeError [ERR_INVALID_ARG_TYPE]: Đối số đầu tiên phải thuộc loại chuỗi hoặc một phiên bản của Bộ đệm hoặc Uint8Array. Đã nhận không xác định
tại write_ (_http_outgoing.js:696:11)
tại ServerResponse.write (_http_outgoing.js:661:15)
tại reqCallback (/home/sandbar/Desktop/nodeapp-local/app.js:116:6)
tại IncomingMessage.<anonymous> (/home/sandbar/Desktop/nodeapp-local/app.js:87:10)
tại IncomingMessage.emit (events.js:327:22)
ở cuốiReadableNT (_stream_readable.js:1327:12)
tại processTicksAndRejections (nội bộ/tiến trình/task_queues.js:80:21) {
mã: 'ERR_INVALID_ARG_TYPE'
}
ứng dụng [gật đầu] bị lỗi - đang chờ thay đổi tệp trước khi bắt đầu...
Cũng như vấn đề trên, tôi cũng bắt đầu không hợp tác khi tôi cố gắng truy cập cơ sở dữ liệu MySQL từ thiết bị đầu cuối.
$ sudo mysql
[sudo] mật khẩu cho sandbar:
LỖI 1045 (28000): Quyền truy cập bị từ chối đối với người dùng 'root'@'localhost' (sử dụng mật khẩu: KHÔNG)
Nói chung, tôi tự hỏi liệu Ubuntu 20.04.2 và MySQL 8.0.27 có thực sự được tạo ra để hoạt động cùng nhau hay không.