Hướng dẫn nodejs rest api mysql

Trong bài hôm nay mình sẽ hướng dẫn, tìm hiểu tạo RESTful Api cùng với nodejs & mysql

I. Create Project Folder

Tạo project folder

 mkdir node-rest-crud-api
 cd node-rest-crud-api

Sau khi tạo thành công node-rest-crud-api, tiếp theo sử dụng cmd dưới để khởi tạo project nodejs

npm init --yes

npm install  

Bây giờ cài đặt framwork expressjs & mysql driver

 npm install express --save
 npm install mysql --save
 npm install body-parser --save

II. Create Database and table

Create DB:

CREATE DATABASE nodejs_mysql;

Create table:

--
-- Table structure for table `tasks`
--

CREATE TABLE `tasks` [
 `id` int[11] NOT NULL,
 `task` varchar[200] NOT NULL,
 `status` tinyint[1] NOT NULL DEFAULT '1',
 `created_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP
] ENGINE=InnoDB DEFAULT CHARSET=latin1;

--
-- Dumping data for table `tasks`
--

INSERT INTO `tasks` [`id`, `task`, `status`, `created_at`] VALUES
[1, 'Find bugs', 1, '2019-04-10 23:50:40'],
[2, 'Review code', 1, '2019-04-10 23:50:40'],
[3, 'Fix bugs', 1, '2019-04-10 23:50:40'],
[4, 'Refactor Code', 1, '2019-04-10 23:50:40'],
[5, 'Push to prod', 1, '2019-04-10 23:50:50'];

Create files & folder

Tạo cấu trúc thư mục và files như dưới đây

server.js

Tạo server.js với nội dung như sau

const express = require['express'],
   app = express[],
   bodyParser = require['body-parser'];
port = process.env.PORT || 3000;
app.listen[port];

console.log['API server started on: ' + port];

app.use[bodyParser.urlencoded[{ extended: true }]];
app.use[bodyParser.json[]];

var routes = require['./routes/appRoutes']; //importing route
routes[app]; //register the route

appRoutes.js

'use strict';
module.exports = function[app] {
   var todoList = require['../controllers/appController'];

   // todoList Routes
   app.route['/tasks']
       .get[todoList.list_all_tasks]
       .post[todoList.create_a_task];

   app.route['/tasks/:taskId']
       .get[todoList.read_a_task]
       .put[todoList.update_a_task]
       .delete[todoList.delete_a_task];
};

appController.js

'use strict';

var Task = require['../models/appModel.js'];

exports.list_all_tasks = function[req, res] {
    Task.getAllTask[function[err, task] {

        console.log['controller']
        if [err]
            res.send[err];
        console.log['res', task];
        res.send[task];
    }];
};

exports.create_a_task = function[req, res] {
    var new_task = new Task[req.body];

    //handles null error
    if[!new_task.task || !new_task.status]{

        res.status[400].send[{ error:true, message: 'Please provide task/status' }];

    }
    else{

        Task.createTask[new_task, function[err, task] {

            if [err]
                res.send[err];
            res.json[task];
        }];
    }
};


exports.read_a_task = function[req, res] {
    Task.getTaskById[req.params.taskId, function[err, task] {
        if [err]
            res.send[err];
        res.json[task];
    }];
};


exports.update_a_task = function[req, res] {
    Task.updateById[req.params.taskId, new Task[req.body], function[err, task] {
        if [err]
            res.send[err];
        res.json[task];
    }];
};


exports.delete_a_task = function[req, res] {


    Task.remove[ req.params.taskId, function[err, task] {
        if [err]
            res.send[err];
        res.json[{ message: 'Task successfully deleted' }];
    }];
};

db.js

Thông tin kết nối database

'user strict';

var mysql = require['mysql'];

//local mysql db connection
var connection = mysql.createConnection[{
    host     : 'localhost',
    user     : 'root',
    password : '',
    database : 'nodejs_mysql'
}];
// connect to database
connection.connect[function[err] {
    if [err] throw err;
}];

module.exports = connection;

appModel.js

'user strict';
var sql = require['./db.js'];

//Task object constructor
var Task = function[task]{
    console.log[task];
    this.task = task.task;
    this.status = task.status;
    this.created_at = new Date[];
};
Task.createTask = function createUser[newTask, result] {
    sql.query["INSERT INTO tasks set ?", newTask, function [err, res] {

        if[err] {
            console.log["error: ", err];
            result[err, null];
        }
        else{
            console.log[res.insertId];
            result[null, res.insertId];
        }
    }];
};
Task.getTaskById = function createUser[taskId, result] {
    sql.query["Select task from tasks where id = ? ", taskId, function [err, res] {
        if[err] {
            console.log["error: ", err];
            result[err, null];
        }
        else{
            result[null, res];

        }
    }];
};
Task.getAllTask = function getAllTask[result] {
    sql.query["Select * from tasks", function [err, res] {

        if[err] {
            console.log["error: ", err];
            result[null, err];
        }
        else{
            console.log['tasks : ', res];

            result[null, res];
        }
    }];
};
Task.updateById = function[id, task, result]{
    sql.query["UPDATE tasks SET task = ? WHERE id = ?", [task.task, id], function [err, res] {
        if[err] {
            console.log["error: ", err];
            result[null, err];
        }
        else{
            result[null, res];
        }
    }];
};
Task.remove = function[id, result]{
    sql.query["DELETE FROM tasks WHERE id = ?", [id], function [err, res] {

        if[err] {
            console.log["error: ", err];
            result[null, err];
        }
        else{

            result[null, res];
        }
    }];
};

module.exports= Task;

III. Demo

Khởi động server

$ npm start

Nếu output như dưới thì server đã tạo ok

Test thử xem thế nào

GET

//localhost:3000/tasks

POST

//localhost:3000/tasks

GET Item

//localhost:3000/tasks/1

PUT

//localhost:3000/tasks/1

DELETE

//localhost:3000/tasks/6

Như vậy là mình đã hướng dẫn cách tạo RESTful API , cách kết nối db mysql, cấu trúc folder trong nodejs, hy vọng sẽ giúp ích cho bạn, Thanks.

Chủ Đề