Hướng dẫn nodejs xampp mysql - nodejs xampp mysql

Mục lục

Hướng dẫn nodejs xampp mysql - nodejs xampp mysql
Nhóm phát triển của chúng tôi vừa ra mắt website langlearning.net học tiếng Anh, Nga, Đức, Pháp, Việt, Trung, Hàn, Nhật, ... miễn phí cho tất cả mọi người. Là một website được viết trên công nghệ web Flutter vì vậy hỗ trợ rất tốt cho người học, kể cả những người học khó tính nhất. Hiện tại website đang tiếp tục được cập nhập nội dung cho phong phú và đầy đủ hơn. Mong các bạn nghé thăm và ủng hộ website mới của chúng tôi.
Là một website được viết trên công nghệ web Flutter vì vậy hỗ trợ rất tốt cho người học, kể cả những người học khó tính nhất.
Hiện tại website đang tiếp tục được cập nhập nội dung cho phong phú và đầy đủ hơn. Mong các bạn nghé thăm và ủng hộ website mới của chúng tôi.

Hướng dẫn nodejs xampp mysql - nodejs xampp mysql
Hãy theo dõi chúng tôi trên Fanpage để nhận được thông báo mỗi khi có bài viết mới. Facebook
Hướng dẫn nodejs xampp mysql - nodejs xampp mysql
Facebook

1- Install MySQL Driver

Trước hết bạn cần tạo một project NodeJS, chẳng hạn ở đây tôi tạo một project với tên là NodeJSMySQL. NodeJS, chẳng hạn ở đây tôi tạo một project với tên là NodeJSMySQL.

Tiếp theo bạn cần cài đặt thư viện MySQL cho project của bạn. Mở cửa sổ CMD và CD tới thư mục gốc của project, và thực hiện lệnh dưới đây: MySQL cho project của bạn. Mở cửa sổ CMDCD tới thư mục gốc của project, và thực hiện lệnh dưới đây:

Hướng dẫn nodejs xampp mysql - nodejs xampp mysql

Hướng dẫn nodejs xampp mysql - nodejs xampp mysql

Sau khi cài đặt xong, một thư mục node_modules sẽ được tạo ra trên project của bạn, thư mục này chứa các thư viện cần thiết để ứng dụng của bạn có thể kết nối cơ sở dữ liệu MySQL: node_modules sẽ được tạo ra trên project của bạn, thư mục này chứa các thư viện cần thiết để ứng dụng của bạn có thể kết nối cơ sở dữ liệu MySQL:

Hướng dẫn nodejs xampp mysql - nodejs xampp mysql

2- Kết nối MySQL

Ở bước trên bạn đã tạo thành công một project, và cài đặt các thư viện MySQL cho project này. Bây giờ tạo một ví dụ nhỏ, kết nối vào cơ sở dữ liệu MySQL. OK, Tạo một tập tin connection-example.js: MySQL cho project này. Bây giờ tạo một ví dụ nhỏ, kết nối vào cơ sở dữ liệu MySQL. OK, Tạo một tập tin connection-example.js:

Hướng dẫn nodejs xampp mysql - nodejs xampp mysql

connection-example.js


var mysql = require('mysql');

console.log('Get connection ...');

var conn = mysql.createConnection({
  database: 'mytestdb',
  host: "localhost",
  user: "root",
  password: "12345"
});

conn.connect(function(err) {
  if (err) throw err;
  console.log("Connected!");
});

Chạy ví dụ:



node connection-example.js

Hướng dẫn nodejs xampp mysql - nodejs xampp mysql

Error: ER_NOT_SUPPORTED_AUTH_MODE

Khi chạy ví dụ trên, có thể bạn sẽ nhận được một thông báo lỗi như sau:

Hướng dẫn nodejs xampp mysql - nodejs xampp mysql

** Error **


E:\NODEJS\NodeJSMySQL\node_modules\mysql\lib\protocol\Parser.js:80
        throw err; // Rethrow non-MySQL errors
        ^

Error: ER_NOT_SUPPORTED_AUTH_MODE: Client does not support authentication protocol requested by server; consider upgrading MySQL client
    at Handshake.Sequence._packetToError (E:\NODEJS\NodeJSMySQL\node_modules\mysql\lib\protocol\sequences\Sequence.js:52:14)
    at Handshake.ErrorPacket (E:\NODEJS\NodeJSMySQL\node_modules\mysql\lib\protocol\sequences\Handshake.js:130:18)
    at Protocol._parsePacket (E:\NODEJS\NodeJSMySQL\node_modules\mysql\lib\protocol\Protocol.js:279:23)
    at Parser.write (E:\NODEJS\NodeJSMySQL\node_modules\mysql\lib\protocol\Parser.js:76:12)
    at Protocol.write (E:\NODEJS\NodeJSMySQL\node_modules\mysql\lib\protocol\Protocol.js:39:16)
    at Socket. (E:\NODEJS\NodeJSMySQL\node_modules\mysql\lib\Connection.js:103:28)
    at emitOne (events.js:116:13)
    at Socket.emit (events.js:211:7)
    at addChunk (_stream_readable.js:263:12)
    at readableAddChunk (_stream_readable.js:250:11)
    --------------------
    at Protocol._enqueue (E:\NODEJS\NodeJSMySQL\node_modules\mysql\lib\protocol\Protocol.js:145:48)
    at Protocol.handshake (E:\NODEJS\NodeJSMySQL\node_modules\mysql\lib\protocol\Protocol.js:52:23)
    at Connection.connect (E:\NODEJS\NodeJSMySQL\node_modules\mysql\lib\Connection.js:130:18)
    at Object. (E:\NODEJS\NodeJSMySQL\connection-example.js:11:6)
    at Module._compile (module.js:652:30)
    at Object.Module._extensions..js (module.js:663:10)
    at Module.load (module.js:565:32)
    at tryModuleLoad (module.js:505:12)
    at Function.Module._load (module.js:497:3)
    at Function.Module.runMain (module.js:693:10)

Nguyên nhân của lỗi ở trên là do bạn sử dụng cơ sở dữ liệu MySQL quá mới (version >= 8.x). Các phiên bản MySQL cũ (5.x) sử dụng plugin xác thực (authentication plugin) là SHA256_PASSWORD. Phiên bản MySQL 8.x sử dụng plugin xác thực là SHA2_PASSWORD. Thư viện NodeJS MySQL chưa kịp thay đổi, nó đang sử dụng plugin xác thực SHA256_PASSWORD, và chưa hỗ trợ SHA2_PASSWORD. MySQL quá mới (version >= 8.x). Các phiên bản MySQL cũ (5.x) sử dụng plugin xác thực (authentication plugin) là SHA256_PASSWORD. Phiên bản MySQL 8.x sử dụng plugin xác thực là SHA2_PASSWORD. Thư viện NodeJS MySQL chưa kịp thay đổi, nó đang sử dụng plugin xác thực SHA256_PASSWORD, và chưa hỗ trợ SHA2_PASSWORD.

ReleaseGeneral availabilityLatest minor versionLatest releaseEnd of support
5.12008-11-14 5.1.73 2013-12-03 December 2013
5.52010-12-03 5.5.60 2018-04-19 December 2018
5.62013-02-05 5.6.40 2018-04-19 December 2018
5.72013-02-05 5.7.22 2018-04-19 December 2018
8.02018-04-19 8.0.11 2018-04-19 December 2018

2013-02-05 "MySQL Command Line Client" và thực thi lệnh dưới đây:



# Syntax:

ALTER USER 'my_username'@'my_host' IDENTIFIED WITH 'mysql_native_password' BY 'my_password';


# Example:

ALTER USER 'root'@'localhost' IDENTIFIED WITH 'mysql_native_password' BY '12345';

Hướng dẫn nodejs xampp mysql - nodejs xampp mysql

February 2021 Connection từ một connection_string:

2015-10-21



var connString = 'mysql://myuser:mypass@myhost/mdb?charset=utf8_general_ci&timezone=-0700';

var conn = mysql.createConnection(connString);

October 2023

N/A sử dụng phương thức query để thực hiện tất cả các hành động với cơ sở dữ liệu bao gồm:

  • Để khắc phục lỗi trên bạn mở cửa sổ "MySQL Command Line Client" và thực thi lệnh dưới đây:
  • Một cách khác, bạn cũng có thể tạo một đối tượng Connection từ một connection_string:

** Create Connection from ConnectionString **


// query method:

query(sql, [values], callback)

// Example:

query(sql, [values], function(err, rows, fields)  {

});

3- Ví dụ: query(sql, callback) MySQL và thực hiện các thao tác với code:

  1. NodeJS MySQL API sử dụng phương thức query để thực hiện tất cả các hành động với cơ sở dữ liệu bao gồm: bảng EMPLOYEES nếu nó tồn tại.
  2. DDL: Create DB, Table, ...EMPLOYEES.
  3. DML: Insert, Update, Query, Call Function, Procedure,...EMPLOYEES.

first-example.js


var mysql = require('mysql');

var conn = mysql.createConnection({
  database: 'mytestdb',
  host: "localhost",
  user: "root",
  password: "12345"
});


conn.connect(function(err) {
    if (err) {
        throw err;
    }
    console.log("Connected!");

    // Drop EMPLOYEES table if Exists!!
    var sql1 = "DROP TABLE IF EXISTS Employees ";

    conn.query(sql1, function(err, results) {
        if (err) throw err;
        console.log("Table EMPLOYEES dropped");
    });

    // Create EMPLOYEES Table.
    var sql2 = "CREATE TABLE Employees " +
        " (Id INT not null AUTO_INCREMENT, " +
        " Emp_No VARCHAR(20), " +
        " Full_Name VARCHAR(255), " +
        " Hire_Date DATE, " +
        " PRIMARY KEY (Id) )";

    conn.query(sql2, function(err, results) {
        if (err) throw err;
        console.log("Table Employees created");
    });

    var empNos = ["E01", "E02", "E03"];
    var fullNames = ["John", "Smith", "Gates"];
    var hireDates = ["22/10/2001", "11/11/2000", "12/12/1990"];

    // Insert Datas to EMPLOYEES.
    for (var i = 0; i < empNos.length; i++) {
        var sql3 = "Insert into Employees (Emp_No, Full_Name, Hire_Date) " //
            +
            " Values ('" + empNos[i] + "', '" + fullNames[i] + "', STR_TO_DATE('" + hireDates[i] + "', '%d/%m/%Y') )";

        conn.query(sql3, function(err, results) {
            if (err) throw err;
            console.log("Insert a record!");
        });
    }

});
 

Chạy ví dụ:

Hướng dẫn nodejs xampp mysql - nodejs xampp mysql

Hướng dẫn nodejs xampp mysql - nodejs xampp mysql

Error: ER_NOT_SUPPORTED_AUTH_MODE mysql.format(sql, replaces) giúp bạn chuẩn bị một mệnh đề SQL (SQL Statement), nó giúp bạn tạo ra một mênh đề SQL đơn giản và dễ nhìn hơn:

Khi chạy ví dụ trên, có thể bạn sẽ nhận được một thông báo lỗi như sau:


// Select * from EMPLOYEES where HIRE_DATE > STR_TO_DATE( '20/11/1995' , '%d/%m/%Y')
var sql_template = "Select * from ?? where ?? > STR_TO_DATE( ? , '%d/%m/%Y') ";

var replaces = ['EMPLOYEES', 'HIRE_DATE', '20/11/1995'];
sql = mysql.format(sql_template, replaces);

console.log("SQL="+ sql);

** Error **

prepared-query-example.js


var mysql = require('mysql');

var conn = mysql.createConnection({
    database: 'mytestdb',
    host: "localhost",
    user: "root",
    password: "12345"
});


conn.connect(function(err) {
    if (err) throw err;

    console.log("Connected!");

    // Select * from EMPLOYEES where HIRE_DATE > STR_TO_DATE( '20/11/1995' , '%d/%m/%Y')
    var sql_template = "Select * from ?? where ?? > STR_TO_DATE( ? , '%d/%m/%Y') ";

    var replaces = ['EMPLOYEES', 'HIRE_DATE', '20/11/1995'];
    sql = mysql.format(sql_template, replaces);

    console.log("SQL=" + sql);
    console.log(" ************************ ");


    conn.query(sql, function(err, rows, fields) {
        if (err) throw err;
        for (var i = 0; i < rows.length; i++) {
            console.log("\n------ Row " + i + " ---- ");
            console.log(rows[i]);
            console.log("\n");
            console.log("  - Emp_No: " + rows[i].Emp_No)
            console.log("  - Full_Name: " + rows[i].Full_Name);
        }
    });

});

Hướng dẫn nodejs xampp mysql - nodejs xampp mysql

Nguyên nhân của lỗi ở trên là do bạn sử dụng cơ sở dữ liệu MySQL quá mới (version >= 8.x). Các phiên bản MySQL cũ (5.x) sử dụng plugin xác thực (authentication plugin) là SHA256_PASSWORD. Phiên bản MySQL 8.x sử dụng plugin xác thực là SHA2_PASSWORD. Thư viện NodeJS MySQL chưa kịp thay đổi, nó đang sử dụng plugin xác thực SHA256_PASSWORD, và chưa hỗ trợ SHA2_PASSWORD.


[ RowDataPacket {
    Id: 1,
    Emp_No: 'E01',
    Full_Name: 'John',
    Hire_Date: 2001-10-21T17:00:00.000Z },

  RowDataPacket {
    Id: 2,
    Emp_No: 'E02',
    Full_Name: 'Smith',
    Hire_Date: 2000-11-10T17:00:00.000Z } ]

Release



node connection-example.js
0

General availability

Latest minor version