Hướng dẫn login logout nodejs mysql - đăng nhập đăng xuất nodejs mysql

Mình đã có một bài về Bắt đầu Nodejs - Mongoose API (Authentication - CRUD) cho người mới học sử dụng Mongoose.Mongoose.

Trong bài viết này, mình và các bạn sẽ làm một app API giỗng như bài trên, nhưng với phiên bản Mysql nhé.Mysql nhé.

Không dài dòng nữa. Nào. Bắt đầu thôi.

1. Chuẩn bị và tạo project

Những thứ cần chuẩn bị và tiến hành tạo project giống với bài viết Bắt đầu Nodejs - Mongoose API (Authentication - CRUD) cho người mới học của mình.chuẩn bị và tiến hành tạo project giống với bài viết Bắt đầu Nodejs - Mongoose API (Authentication - CRUD) cho người mới học của mình.

Nhưng có chút thay đổi là cần phải chuẩn bị MySql thay vì MongoDBMySql thay vì MongoDB

Và sử dụng package mysql và express-mysql-session thay cho mongoose và connect-mongomysqlexpress-mysql-session thay cho mongooseconnect-mongo

Tương tự, chúng ta kiểm tra thành quả sau bước đầu chuẩn bị:

...:~/MyNodeProject$ npm run devstart

Các package cần dùng:

  • body-parser (parse các request tới server) (parse các request tới server)
  • express (làm cho ứng dụng chạy) (làm cho ứng dụng chạy)
  • nodemon (restart khi có thay đổi xảy ra) (restart khi có thay đổi xảy ra)
  • bcrypt (hashing và salting passwords) (hashing và salting passwords)
  • express session (xử lý sessions) (xử lý sessions)
  • dotenv (sử dụng .env) (sử dụng .env)
  • express-validator
  • morgan
  • express-mysql-session
  • mysql
  • mysql2
  • sequelize
  • sequelize-cli
...:~/MyNodeProject$ npm i body-parser sequelize sequelize-cli mysql mysql2 express-mysql-session bcrypt express session dotenv express-validator morgan

Và mở Postman chạy GET http://localhost:8797

Hướng dẫn login logout nodejs mysql - đăng nhập đăng xuất nodejs mysql

2. Configuration MySql

Tạo file

// config/config.json
{
  "development": {
    "username": "",
    "password": "",
    "database": "",
    "host": "",
    "dialect": "mysql"
  }
}
5 đơn giản và điền thông tin db của bạn:

// config/config.json
{
  "development": {
    "username": "",
    "password": "",
    "database": "",
    "host": "",
    "dialect": "mysql"
  }
}

// config/config.json
{
  "development": {
    "username": "",
    "password": "",
    "database": "",
    "host": "",
    "dialect": "mysql"
  }
}
6 cũng điền thông tin db tương ứng:

// config/databaseConn.js

let Sequelize = require("sequelize");

let sequelize = new Sequelize("database", "username", "password", {
  host: "localhost",
  dialect: "mysql"
});

module.exports = sequelize;

// config/config.json
{
  "development": {
    "username": "",
    "password": "",
    "database": "",
    "host": "",
    "dialect": "mysql"
  }
}
7 sẽ có dạng như thế này:

{
  "name": "mynodeproject",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "devstart": "nodemon run index.js",
    "db:create": "npx sequelize db:create",
    "db:migrate": "npx sequelize db:migrate"
  },
  "author": "",
  "license": "ISC",
  "dependencies": {
    "bcrypt": "^3.0.6",
    "body-parser": "^1.19.0",
    "dotenv": "^8.0.0",
    "express": "^4.17.1",
    "express-mysql-session": "^2.1.0",
    "express-validator": "^5.3.1",
    "morgan": "^1.9.1",
    "mysql": "^2.17.1",
    "mysql2": "^1.6.5",
    "sequelize": "^5.8.8",
    "sequelize-cli": "^5.4.0",
    "session": "^0.1.0"
  }
}

Chạy:

...:~/MyNodeProject$ npm run db:create

2.1. Migration

Tạo file

// config/config.json
{
  "development": {
    "username": "",
    "password": "",
    "database": "",
    "host": "",
    "dialect": "mysql"
  }
}
8 migration:

// migrations/0001_initUser.js

"use strict";
module.exports = {
  up: (queryInterface, Sequelize) => {
    return queryInterface.createTable("users", {
      id: {
        allowNull: false,
        autoIncrement: true,
        primaryKey: true,
        type: Sequelize.INTEGER,
      },
      email: {
        type: Sequelize.STRING,
        allowNull: false,
      },
      username: {
        type: Sequelize.STRING,
        allowNull: false,
      },
      role: {
        type: Sequelize.ENUM("admin", "customer"),
        allowNull: false,
      },
      password: {
        type: Sequelize.STRING,
        allowNull: false,
      },
      created_at: {
        type: Sequelize.DATE(3),
        defaultValue: Sequelize.literal("CURRENT_TIMESTAMP(3)"),
      },
      updated_at: {
        type: Sequelize.DATE(3),
        defaultValue: Sequelize.literal("CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3)"),
      },
    }).then(() => {
      return queryInterface.addIndex("users", ["id"])
    });
  },
  down: (queryInterface, Sequelize) => {
    return queryInterface.dropTable("users");
  },
};

Sau đó chaỵ:

...:~/MyNodeProject$ npm run db:migrate

Hướng dẫn login logout nodejs mysql - đăng nhập đăng xuất nodejs mysql

2.2. Model

// src/users/userModel.js

"use strict";

let Sequelize = require("sequelize");
let sequelize = require("../config/databaseConn");

// table [extension]
let User = sequelize.define("users", {
  email: Sequelize.STRING,
  username: Sequelize.STRING,
  password: Sequelize.STRING,
  role: {
    type: Sequelize.ENUM("admin", "customer"),
  },
}, {
  tableName: "users",
  createdAt: "created_at",
  updatedAt: "updated_at",
  indexes: [
    {
      unique: true,
      fields: ["id"],
    },
  ],
  charset: 'utf8',
  collate: 'utf8_unicode_ci',
});

module.exports = {
  User,
};

3. Authentication

3.1. Register

Cần chỉnh lại file

// config/config.json
{
  "development": {
    "username": "",
    "password": "",
    "database": "",
    "host": "",
    "dialect": "mysql"
  }
}
9 một chút:

// index.js

let express = require('express')
let morgan = require('morgan')
let bodyParser = require('body-parser')
let expressValidator = require('express-validator')
let session = require('express-session');
let MySQLStore = require('express-mysql-session')(session);

let app = express()
let PORT = 8797

let options = {
  host: "",
  port: "",
  user: "",
  password: "",
  database: ""
};
let sessionStore = new MySQLStore(options);

app.use(session({
  key: 'session_cookie_name',
  secret: 'session_cookie_secret',
  store: sessionStore,
  resave: true,
  saveUninitialized: false
}));
app.use(morgan("dev"))
app.use(bodyParser.json())
app.use(expressValidator())

app.use("/", require("./src/users/userControllers"));

app.listen(PORT, () => {
  console.log("Server started on http://localhost:" + PORT);
})

module.exports = app;

Tạo 1 file

// config/databaseConn.js

let Sequelize = require("sequelize");

let sequelize = new Sequelize("database", "username", "password", {
  host: "localhost",
  dialect: "mysql"
});

module.exports = sequelize;
0 để xử lý logic:

...:~/MyNodeProject$ npm i body-parser sequelize sequelize-cli mysql mysql2 express-mysql-session bcrypt express session dotenv express-validator morgan
0

Tạo file

// config/databaseConn.js

let Sequelize = require("sequelize");

let sequelize = new Sequelize("database", "username", "password", {
  host: "localhost",
  dialect: "mysql"
});

module.exports = sequelize;
1 để validate body:

...:~/MyNodeProject$ npm i body-parser sequelize sequelize-cli mysql mysql2 express-mysql-session bcrypt express session dotenv express-validator morgan
1

Controllers:

...:~/MyNodeProject$ npm i body-parser sequelize sequelize-cli mysql mysql2 express-mysql-session bcrypt express session dotenv express-validator morgan
2

3.2. Log in

  • // config/databaseConn.js
    
    let Sequelize = require("sequelize");
    
    let sequelize = new Sequelize("database", "username", "password", {
      host: "localhost",
      dialect: "mysql"
    });
    
    module.exports = sequelize;
    
    2
...:~/MyNodeProject$ npm i body-parser sequelize sequelize-cli mysql mysql2 express-mysql-session bcrypt express session dotenv express-validator morgan
3
  • // config/databaseConn.js
    
    let Sequelize = require("sequelize");
    
    let sequelize = new Sequelize("database", "username", "password", {
      host: "localhost",
      dialect: "mysql"
    });
    
    module.exports = sequelize;
    
    3
...:~/MyNodeProject$ npm i body-parser sequelize sequelize-cli mysql mysql2 express-mysql-session bcrypt express session dotenv express-validator morgan
4
  • // config/databaseConn.js
    
    let Sequelize = require("sequelize");
    
    let sequelize = new Sequelize("database", "username", "password", {
      host: "localhost",
      dialect: "mysql"
    });
    
    module.exports = sequelize;
    
    4
...:~/MyNodeProject$ npm i body-parser sequelize sequelize-cli mysql mysql2 express-mysql-session bcrypt express session dotenv express-validator morgan
5

3.3. Log out

  • // config/databaseConn.js
    
    let Sequelize = require("sequelize");
    
    let sequelize = new Sequelize("database", "username", "password", {
      host: "localhost",
      dialect: "mysql"
    });
    
    module.exports = sequelize;
    
    4
...:~/MyNodeProject$ npm i body-parser sequelize sequelize-cli mysql mysql2 express-mysql-session bcrypt express session dotenv express-validator morgan
6

4. CRUD Posts

4.1 Migration

...:~/MyNodeProject$ npm i body-parser sequelize sequelize-cli mysql mysql2 express-mysql-session bcrypt express session dotenv express-validator morgan
7

Run:

...:~/MyNodeProject$ npm run db:migrate

4.2. CRUD

...:~/MyNodeProject$ npm i body-parser sequelize sequelize-cli mysql mysql2 express-mysql-session bcrypt express session dotenv express-validator morgan
9
// config/config.json
{
  "development": {
    "username": "",
    "password": "",
    "database": "",
    "host": "",
    "dialect": "mysql"
  }
}
0
// config/config.json
{
  "development": {
    "username": "",
    "password": "",
    "database": "",
    "host": "",
    "dialect": "mysql"
  }
}
1
// config/config.json
{
  "development": {
    "username": "",
    "password": "",
    "database": "",
    "host": "",
    "dialect": "mysql"
  }
}
2
// config/config.json
{
  "development": {
    "username": "",
    "password": "",
    "database": "",
    "host": "",
    "dialect": "mysql"
  }
}
3
// config/config.json
{
  "development": {
    "username": "",
    "password": "",
    "database": "",
    "host": "",
    "dialect": "mysql"
  }
}
4

5. End

Như vậy là đã hoàn thành chức năng Authentication và CRUD 1 cách đơn giản với phiên bản sử dụng MySql. Hi vọng là bài viết này sẽ 1 phần nào đó giúp được các bạn mới bắt đầu học Nodejs như mình.

Nếu thấy hay, hãy upvote, share để được đẹp trai và xinh gái hơn.