Hướng dẫn tạo Restful API với Nodejs, Express và mysql. Như tiêu đề hôm nay mình sẽ hướng dẫn các bạn làm sao tạo được một Restful API đơn giản CRUD (create, read, update, delete). và Restful API này sẽ dùng các phương thức chính như GET, POST, PUT, DELETE.
Để chuẩn bị cho quá trình xây đựng API chúng ta cần cài đặt nodejs va npm trên máy tính. để cài đặt các bạn vào đây để download bộ cài về máy tính. Ngoài ra bạn cũng nên cài LAMP trên máy tính nữa nhé.
1. Tạo Project
Để dể dàng quản lý chúng ta tạo một folder TODO. Để khởi tạo một project dùng nodejs chúng ta làm như sau:
Duy chuyển đến thư mục TODO và thực thi dòng lệnh bên dưới bằng cmd hoặc gitbash.
npm init
Câu lệnh này sẽ tạo cho các bạn một file package.json. File nay sẽ giúp chúng ta lưu trữ những package cần thiết cho project nhựng package đó là gì lác nữa chúng ta sẽ biết nhé.
Chúng ta mở file package.json bằng một chường trình editor nào đó tùy bạn thêm vào thông tin của project của chúng ta nhằm dể nhận biết sao này .
{ "name": "TODO", "version": "1.0.0", "description": "Tạo Restful API với Nodejs, Express và mysql", "author": "LONG PHAM", "license": "MIT" }
2. Cài Đặt Package
Đây có lẽ cũng là phần không kém quan trong trong project của chúng ta vì nêu không có những package này có lẽ cũng không thể chạy được project. để cài đặt chúng ta dùng command thự thi lệnh bên dưới:
npm install express --save npm install body-parser --save npm install mysql --save
3. Tạo Server
Sau khi cài đặt thành công các package trên chúng ta cần tạo một môi trường cho Nodejs hay còn gọi là server. Việc tạo server cũng khá đơn giản. Đầu tiên chúng ta suy chuyển đến thư mục tạo một file có tên là server.js. Tên file các bạn cứ đặt tùy ý nhé lúc gọi thì chúng ta chỉ cần gọi đúng tên file là được.
Mở file server.js chúng ta thêm vào đoạn code để khởi tạo server.
var express = require('express'); var bodyparser = require('body-parser'); var app = express(); app.use(bodyparser.urlencoded({extended: true})); app.use(bodyparser.json()); var server = app.listen(3000, function() { console.log('Server listening on port ' + server.address().port); });
Tất cả những gì chúng ta cần làm là khai báo Express và body-parser. Sau đó chúng ta sẽ khai báo sử dụng Express và config body-parser chấp nhập request theo phương thức POST. Cuối cùng là cấu hình server Port thông qua hàm app.listen. Ở đây tôi sử dụng port 3000 và bạn có thể sử dụng port các tùy ý nếu port đã sử dụng bạn hãy đổi lại port khac.
4. Kiểm Tra Server
Sau khi hoàn thành bước 3. Chúng ta tiến hành kiểm tra xem server vừa tạo có chạy được không bằng cách thực thi lệnh
node server.js
Nếu thành công màng hình sẽ thông báo Server listening on port 3000
5. Tạo Database
Chúng ta tiến hành tạo database sử dụng Mysql. Việc tạo database cũng khá đơn giản các bạn có thể dùng phpMyAdmin để tạo hoặc thự thi câu query bên dưới:
CREATE DATABASE `todo`; USE `todo`; CREATE TABLE `todo`.`todo_list` ( `id` INT NOT NULL AUTO_INCREMENT , `name` VARCHAR(100) NOT NULL , `date` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP , PRIMARY KEY (`id`)) ENGINE = InnoDB;
Tôi sẽ tạo một databse có tên là todo và trong databse này toi sẽ tạo tiếp một table có tên la todo_list với các trường id là khóa chính, name và date
6. Tạo Connect Tới Database
Sau khi tạo xong database ở bước 5. Để server có thể kết nói tới database dùng Mysql thì chúng ta phải tạo một kết nói từ server lên Mysql phải không nào. Ở đây tôi sẽ tạo một file có tên connection.js. Nội dung File nhu sau:
var mysql = require('mysql'); function Connection() { this.pool = null; this.init = function() { this.pool = mysql.createPool({ connectionLimit: 10, host: 'localhost', user: 'root', password: '', database: 'todo' }); }; this.acquire = function(callback) { this.pool.getConnection(function(err, connection) { callback(err, connection); }); }; } module.exports = new Connection();
Trong File connection.js chúng ta cần khai báo sử dụng Mysql. Tiếp theo chúng ta sẽ tạo một function chứa các driver connect tới database chúng ta đã tạo và trả về kết quả .
7. Tạo Tương Tác Model
Sau khi tạo được kết nối tới Databse thành công, công việc tiếp theo sẽ tạo các tương tác trong trong model như các phương thức get, create, read, update, delete. Bắt đầu chúng ta cần tạo một folder có tên là Models. Duy chuyển đến folder Models chúng ta tạo một file có tên todo.js. Ở file này chúng ta sẽ viết các phương thức xử lý CRUD cho project của chúng ta.
var connection = require(‘../connection’); function Todo() { } module.exports = new Todo();
Ban đầu các bạn cần khai báo kết nói tới CSDL sử dung file connection.js các bạn đã làm ở bước 6. Tiếp theo tôi sẽ khai báo hàm có tên là todo(), hàm này sẽ chứa các phướng thức get, create, read, update, delete bên trong và kết thức hàm cuối cùng trả về kết quả thưc thi.
Tiếp tục chúng ta sẽ lần lượt tạo các phương thức bên trong. Đầu tiên là get
this.get = function(res) { connection.acquire(function(err, con) { con.query('select * from todo_list', function(err, result) { con.release(); res.send(result); }); }); };
Hàm này sẽ trả về cho chúng ta một danh sách trong bảng todo_list.
Tiếp theo là phương thức create
this.create = function(field_data, res) { connection.acquire(function(err, con) { con.query('insert into todo_list set ?', field_data, function(err, result) { con.release(); if (err) { res.send({status: 1, message: 'TODO creation failed'}); } else { res.send({status: 0, message: 'TODO created successfully'}); } }); }); };
Sql insert thì chúng ta không còn bàng cải nữa phải không nào. mình chỉ nhấn mạnh các bạn chỉ nên chú ý vào field_data vì đây sẽ là một object nó sẽ chứa các đối tượng như tên column cần insert và giá trị insert.
Tiếp theo sẽ là phương thức update. Phương thức này cũng gần giống như là create chúng ta cũng sẽ truyền vào các đối số object như column cần update, giá trị cần update và điều kiện update.
this.update = function(field_data, res) { connection.acquire(function(err, con) { con.query('update todo_list set ? where id = ?', [field_data, field_data.id], function(err, result) { con.release(); if (err) { res.send({status: 1, message: 'TODO update failed'}); } else { res.send({status: 0, message: 'TODO updated successfully'}); } }); }); };
Tiếp theo sẽ là phương thức read. Phương thức này cũng gấn giống như phương thức get, nhưng chúng ta cần truyền thêm vào đối số get theo id.
this.read = function(id, res) { connection.acquire(function(err, con) { con.query('select * from todo_list where id=?', [id], function(err, result) { con.release(); res.send(result); }); }); };
Cuối cùng là phương thức delete
this.delete = function(id, res) { connection.acquire(function(err, con) { con.query('delete from todo_list where id = ?', [id], function(err, result) { con.release(); if (err) { res.send({status: 1, message: 'Failed to delete'}); } else { res.send({status: 0, message: 'Deleted successfully'}); } }); }); };
Vậy là chúng ta dã xong các chức năng của model. tiếp theo chúng ta sẽ viết Endpoint để có thể thự thi thông qua URL
8. Tạo Endpoint URL
Chúng ta sẽ tạo các endpoint url theo cấu trúc nhu sau:
Đường Dẫn | Thuộc tính | Phương Thức |
---|---|---|
/todo/ | GET | todo.get |
/todo/create/ | POST | todo.create |
/todo/update/ | PUT | todo.update |
/todo/read/:id/ | PUT | todo.read |
/todo/delete/:id/ | DELETE | todo.delete |
Duy chuyển về thư mục góc TODO chúng ta tạo một file có tên là routes.js với nội dung sau:
var todo = require('./Models/todo'); module.exports = { configure: function(app) { app.get('/todo/', function(req, res) { todo.get(res); }); app.get('/todo/read/:id/', function(req, res) { todo.read(res); }); app.post('/todo/create', function(req, res) { todo.create(req.body, res); }); app.put('/todo/update', function(req, res) { todo.update(req.body, res); }); app.delete('/todo/delete/:id/', function(req, res) { todo.delete(req.params.id, res); }); } };
Quay lại chúng ta mở file server.js chúng ta cần khai báo sử dụng kết nối tới CSDL và file routes. Chúng ta thêm vào đâu file server.js nội dung sau:
var connection = require('./connection'); var routes = require('./routes');
Tiếp theo chúng ta sẽ khai báo khởi tạo kết nối và config route cho server. Các bạn sẽ add đoạn code sau trước dòng khởi tạo Port nhé.
connection.init(); routes.configure(app); var server = app.listen(3000, function() { console.log('Server listening on port ' + server.address().port); });
Đến đây chúng ta đã hoàn tất bộ Restful API sử dụng Nodejs, Express và Mysql rồi. Các bạn nên thử lại bằng cách dùng POSTMAN (POSTMAN chorme) các bạn có thể download tại đây. Chúc các bạn thành công!