Dự án mysql của Nodejs

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 gốc -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

Dự án mysql của Nodejs

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

Dự án mysql của Nodejs

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);
      }<);
}

// timeout just to avoid firing query before connection happens

setTimeout(() => {
    // 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`<()
BEGIN
    SELECT * FROM todo;
END$$
 
DELIMITER ;

Đây là mã để gọi thủ tục được lưu trữ từ mã

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 callSP(spName) {
    let spQuery = 'CALL ??';
    let query = mysql.định dạng( spQuery ,[ . spName]);
    // CALL `getAllTodo`
    pool.truy vấn( truy vấn ,( . err, result) => {
        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);

Phần 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ã

MySQL có tốt cho Nodejs không?

js được kết hợp với MongoDB và các cơ sở dữ liệu NoSQL khác, nhưng Node. js cũng hoạt động tốt với các cơ sở dữ liệu quan hệ như MySQL . Nếu bạn muốn viết một microservice mới với Node. js cho cơ sở dữ liệu hiện có, rất có thể bạn sẽ sử dụng MySQL, một trong những cơ sở dữ liệu mã nguồn mở phổ biến nhất thế giới.

Làm cách nào để tạo dự án nút js với MySQL?

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. .
Bước 2. Cài đặt mô-đun nút mysql. Cài đặt mô-đun nút mysql bằng NPM. .
Bước 3. Kết nối với MySQL. Tạo một ứng dụng

Node JS có tốt cho SQL không?

Nút. js rất hữu ích để viết ứng dụng web và bao gồm trình điều khiển cho các cơ sở dữ liệu khác nhau, bao gồm cả SQL và NoSQL .

Nodejs có tốt cho cơ sở dữ liệu không?

Nút. js hỗ trợ tất cả các loại cơ sở dữ liệu bất kể đó là cơ sở dữ liệu quan hệ hay cơ sở dữ liệu NoSQL . Tuy nhiên, cơ sở dữ liệu NoSQL như MongoDb phù hợp nhất với Node. js.