Nút. js và MySQL là một số ràng buộc cần thiết cho bất kỳ ứng dụng web nào. MySQL là một trong những cơ sở dữ liệu nguồn mở phổ biến nhất trên thế giới và cũng hiệu quả. Hầu như mọi ngôn ngữ lập trình phổ biến như Java và PHP đều cung cấp trình điều khiển để truy cập và thực hiện các thao tác với MySQL
Trong hướng dẫn Node js và MySQL này, chúng ta sẽ tìm hiểu cách kết nối máy chủ Node js với cơ sở dữ liệu MySQL. Chúng tôi cũng sẽ tìm hiểu cách gộp các kết nối để cải thiện hiệu suất, truy vấn các bảng và gọi các thủ tục được lưu trữ
Để có thể theo dõi các ví dụ mã trong Nút này. js và hướng dẫn MySQL, bạn nên cài đặt MySQL trên máy tính của mình
Bạn có thể tải xuống cơ sở dữ liệu MySQL miễn phí tại https. //www. mysql. com/tải xuống/
Bắt đầu nhanh. Cách sử dụng MySQL trong nút
Giả sử bạn đã cài đặt Node và MySQL trên máy tính của mình. Hãy nhanh chóng sử dụng MySQL trong Node với ba bước đơn giản
Bước 1. Tạo một nút mới. dự án js
Tạo một thư mục mới và khởi tạo một dự án Node bằng NPM
$ mkdir mysqlexperiment && cd mysqlexperiment
$ npm init --y
Bước 2. Cài đặt mô-đun nút mysql
Cài đặt mô-đun nút mysql bằng NPM
cài đặt npm --save mysql
Bước 3. Kết nối với MySQL
Tạo một ứng dụng. js và sao chép/dán mã hiển thị bên dưới. Thay đổi thông tin đăng nhập MySQL phù hợp với hệ thống của bạn
const mysql = yêu cầu ['mysql'];
const connection = mysql.tạo kết nối[{
máy chủ . 'localhost',
người dùng . 'người dùng',
mật khẩu . 'mật khẩu',
cơ sở dữ liệu . 'databasename'
}];
connection.kết nối[[ err ] . => {
if [err] throw err;
console.log['Đã kết nối với máy chủ MySQL. '];
}];
Chạy mã bằng lệnh sau
ứng dụng nút. js
Quan sát 'Đã kết nối với máy chủ MySQL. ' tin nhắn trong thiết bị đầu cuối
Nếu bạn đã cài đặt máy chủ MySQL mới nhất, bạn có thể gặp lỗi như sau
{
mã . 'ER_NOT_SUPPORTED_AUTH_MODE',
errno . 1251,
sqlMessage . 'Client không hỗ trợ giao thức xác thực do máy chủ yêu cầu; . ,
sqlState: '08004',
gây tử vong . true
}
Để giải quyết vấn đề này, hãy tạo một người dùng mới trong máy chủ MySQL của bạn với cơ chế xác thực ‘mysql_native_password’
Đây là cách bạn có thể làm điều đó một cách nhanh chóng. Đầu tiên, đăng nhập vào máy chủ MySQL bằng quyền truy cập root
mysql -u root -p
Sau đó chạy từng lệnh này
TẠO NGƯỜI DÙNG 'người dùng mới' @ 'localhost' . IDENTIFIED WITH 'mysql_native_password' BY 'newpassword';
GRANT ALL PRIVILEGES ON * . * ĐẾN 'người dùng mới' @ 'localhost';
FLUSH PRIVILEGES;
Trong mã, chuyển thông tin đăng nhập mới để kết nối với máy chủ MySQL. Hãy tiếp tục
Tổng hợp các kết nối MySQL
Mã hiển thị trước đó không dành cho sử dụng sản xuất. Nó chỉ đơn thuần là để giúp bạn bắt đầu với Node và MySQL. Trong kịch bản sản xuất, chúng ta phải sử dụng kết nối tổng hợp để cải thiện hiệu suất của MySQL và không làm quá tải máy chủ MySQL với quá nhiều kết nối
Hãy giải thích nó với một ví dụ đơn giản
Hãy xem xét mã hiển thị dưới đây
const express = yêu cầu ["express"];
const app = express[];
const mysql = require['mysql'];
const connection = mysql.tạo kết nối[{
máy chủ . 'localhost',
người dùng . 'tên người dùng',
mật khẩu . 'mật khẩu',
cơ sở dữ liệu . 'databasename'
}];
connection.kết nối[[ err ] . => {
if[err] throw err;
console.log['Đã kết nối với máy chủ MySQL. '];
}] .
app.lấy["/",[req,res] => {
connection.truy vấn['CHỌN * từ người dùng GIỚI HẠN 1', [err, rows] => {
if[err] throw err;
console.log['Dữ liệu từ bảng người dùng là. \n ', hàng . ;
connection.kết thúc[];
< . }];
}];
app.nghe[3000, [ . ] => {
console.log['Máy chủ đang chạy ở cổng 3000'];
}];
Chúng tôi đang tích hợp mô-đun express để tạo một máy chủ web. Cài đặt mô-đun bằng lệnh sau
cài đặt npm --save express
Chúng tôi đang tạo kết nối MySQL theo mọi yêu cầu đến từ người dùng. Ngay sau khi nhận được nhiều yêu cầu đồng thời, máy chủ MySQL sẽ bị quá tải và báo lỗi
Để mô phỏng kịch bản kết nối đồng thời, chúng tôi sẽ sử dụng một công cụ có tên là cuộc bao vây
Sử dụng lệnh này để cài đặt nó trong hệ thống Ubuntu
Sudo apt-get cài đặt bao vây
Chạy máy chủ Node của chúng tôi
ứng dụng nút. js
Hãy mô phỏng các yêu cầu đồng thời
bao vây -c10 -t1M http. //máy chủ cục bộ. 3000
Giả sử bạn đang chạy máy chủ Node trên Cổng 3000
Đây là đầu ra
Như bạn có thể thấy từ đầu ra ở trên, máy chủ của chúng tôi đã gặp sự cố khi xử lý các yêu cầu đồng thời. Để giải quyết tình huống này, chúng tôi sử dụng cơ chế gộp
Tổng hợp kết nối là một cơ chế để duy trì bộ đệm của kết nối cơ sở dữ liệu để kết nối có thể được sử dụng lại sau khi giải phóng nó
Hãy viết lại mã của chúng tôi để hỗ trợ tổng hợp kết nối
const express = yêu cầu ["express"];
const app = express[];
const mysql = require['mysql'];
const pool = mysql.createPool[{
máy chủ . 'localhost',
người dùng . 'tên người dùng',
mật khẩu . 'mật khẩu',
cơ sở dữ liệu . 'databasename'
}];
app.lấy["/",[req,res] => {
pool.getConnection[[ err , . connection] => {
if[err] throw err;
console.log['được kết nối dưới dạng id ' + connection.threadId];
kết nối. truy vấn['CHỌN * từ người dùng GIỚI HẠN 1', [err, rows] => {
connection.bản phát hành[]; / .
if[err] throw err;
console.log['Dữ liệu từ bảng người dùng là. \n ', hàng . ;
}];
}];
}];
app.nghe[3000, [ . ] => {
console.log['Máy chủ đang chạy ở cổng 3000'];
}];
Chạy ứng dụng bằng lệnh sau
ứng dụng nút. js
Hãy kích hoạt 10 người dùng đồng thời trong 1 phút bằng cách bao vây bằng cách sử dụng lệnh này
bao vây -c10 -t1M http. //máy chủ cục bộ. 3000
Đây là đầu ra
Máy chủ của chúng tôi đang xử lý hiệu quả nhiều yêu cầu một cách dễ dàng. Tôi đã sử dụng phương pháp này trong nhiều giải pháp phần mềm sản xuất có tải trọng lớn và nó hoạt động rất tốt
Hãy tìm hiểu cách thực hiện các truy vấn MySQL khác nhau bằng Node
Thực hiện truy vấn
Hãy tìm hiểu cách thực hiện các truy vấn bằng Node. js
Chèn hàng vào bảng
Đây là mã để thêm hàng mới vào bảng
const mysql = yêu cầu ['mysql'];
const pool = mysql.createPool[{
connectionLimit . 100, //quan trọng
máy chủ : 'localhost',
người dùng . 'root',
mật khẩu . '',
cơ sở dữ liệu . 'todolist',
gỡ lỗi . false
}];< .
// add rows in the table
function addRow[data] {
let insertQuery = 'INSERT INTO ?? [??,??] VALUES [?,?]';
let query = mysql.định dạng[ insertQuery ,[ . "todo","user","notes",data.người dùng, dữ liệu. giá trị]];
nhóm. truy vấn[ truy vấn ,[ . err, response] => {
if[err] {
console.lỗi[ err ]; .
return;
}
// rows added
console.log[ phản hồi. insertId];
}< . ];
}
// timeout just to avoid firing query before connection happens
setTimeout[[] => {
// call the function
addRow[{
"user": "Shahid",
"value": "Chỉ cần thêm ghi chú"
}];
},5000];
mysql. chức năng định dạng sẽ thực hiện thoát truy vấn
Truy vấn dữ liệu trong Table
Đây là mã để truy vấn các hàng trong bảng
const mysql = yêu cầu ['mysql'];
const pool = mysql.createPool[{
connectionLimit . 100, //quan trọng
máy chủ : 'localhost',
người dùng . 'root',
mật khẩu . '',
cơ sở dữ liệu . 'todolist',
gỡ lỗi . false
}];< .
// query rows in the table
function queryRow[userName] {
let selectQuery = 'SELECT * FROM ?? WHERE ?? = ?';
let query = mysql.định dạng[ selectQuery ,[ . "todo","user", userName]];
// query = SELECT * FROM `todo` where `user` = 'shahid'
pool.truy vấn[ truy vấn ,[ . err, data] => {
if[err] {
console.lỗi[ err ]; .
return;
}
// rows fetch
console.log[ dữ liệu ];
}];
}
// timeout just to avoid firing query before connection happens
setTimeout[[] => {
// call the function
// select rows
queryRow['shahid'];
},5000];
Nếu bạn muốn thêm nhiều hàng trong một truy vấn, bạn có thể chuyển một mảng vào các giá trị. Như thế này
let insertQuery = 'CHÈN VÀO ?? . ;
let values = [["shahid","hello"],["Rohit","Hi"]]; // each array is one row
let query = mysql.định dạng[ insertQuery ,["todo","user","notes",values]];
Cập nhật dữ liệu trong Table
Đây là mã để cập nhật dữ liệu trong bảng
const mysql = yêu cầu ['mysql'];
const pool = mysql.createPool[{
connectionLimit . 100, //quan trọng
máy chủ : 'localhost',
người dùng . 'root',
mật khẩu . '',
cơ sở dữ liệu . 'todolist',
gỡ lỗi . false
}];< .
// update rows
function updateRow[data] {
let updateQuery = "UPDATE ?? SET ?? = ? WHERE ?? = ?";
let query = mysql.định dạng[ updateQuery ,[ . "todo","notes",data.giá trị,"người dùng",data.người dùng]];
< . // query = UPDATE `todo` SET `notes`='Hello' WHERE `name`='shahid'
pool.truy vấn[ truy vấn ,[ . err, response] => {
if[err] {
console.lỗi[ err ]; .
return;
}
// rows updated
console.log[ phản hồi. Hàng bị ảnh hưởng];
}< . ];
}
// timeout just to avoid firing query before connection happens
setTimeout[[] => {
// call the function
// update row
updateRow[{
"user": "Shahid",
"value": "Chỉ cập nhật ghi chú"
}];
},5000];
Xóa hàng trong bảng
Đây là mã để xóa một hàng khỏi bảng
const mysql = yêu cầu ['mysql'];
const pool = mysql.createPool[{
connectionLimit . 100, //quan trọng
máy chủ : 'localhost',
người dùng . 'root',
mật khẩu . '',
cơ sở dữ liệu . 'todolist',
gỡ lỗi . false
}];< .
function deleteRow[userName] {
let deleteQuery = "DELETE from ?? where ?? = ?";
let query = mysql.định dạng[ xóa truy vấn , [ . "todo", "user", userName]];
// query = DELETE from `todo` where `user`='shahid';
pool.truy vấn[ truy vấn ,[ . err, response] => {
if[err] {
console.lỗi[ err ]; .
return;
}
// rows deleted
console.log[ phản hồi. Hàng bị ảnh hưởng];
} {
// call the function
// delete row
deleteRow['shahid'];
},5000];
Gọi thủ tục lưu trữ MySQL bằng nút
Bạn cũng có thể gọi một thủ tục được lưu trữ bằng Node. js. Nếu bạn chưa tạo thủ tục lưu trữ trong MySQL, bạn có thể tham khảo mã bên dưới để thực hiện tương tự
DELIMITER $$
TẠO THỦ TỤC `getAllTodo` {
if[err] {
console.lỗi[ err ]; .
return;
}
// rows from SP
console.log[ kết quả ];
}];
}
// timeout just to avoid firing query before connection happens
setTimeout[[] => {
// call the function
// call sp
callSP['getAllTodo']
},5000];
Sự kết luận
MySQL là một trong những công cụ cơ sở dữ liệu được sử dụng rộng rãi trên thế giới và với Node, nó thực sự hoạt động rất tốt. Node MySQL tổng hợp và gỡ lỗi dựa trên sự kiện thực sự mạnh mẽ và dễ viết mã