Hướng dẫn tạo RESTfull API sử dụng node js, express và mysql
Để tạo project ta di chuyển đến thư mục project và thực thi dòng lệnh sau bằng cmd hoặc gitbash npm init -y câu lệnh này sẽ tạo cho bạn 1 file package.json tại thư mục hiện hành với các thông tin của project mặc định { "name": "RESTfullApi", "version": "1.0.0", "description": "", "main": ...
Để tạo project ta di chuyển đến thư mục project và thực thi dòng lệnh sau bằng cmd hoặc gitbash npm init -y câu lệnh này sẽ tạo cho bạn 1 file package.json tại thư mục hiện hành với các thông tin của project mặc định
{ "name": "RESTfullApi", "version": "1.0.0", "description": "", "main": "index.js", "scripts": { "test": "echo "Error: no test specified" && exit 1" }, "keywords": [], "author": "", "license": "ISC" }
sử dụng dòng lệnh sau để cài đặt các package cần thiết cho project:
npm install express --save && npm install mysql --save && npm install body-parser --save
Tiếp theo ta tạo file có tên server.js
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); }); module.exports = app;
ta import 2 package express và body-parser. Rồi cấu hình server Port thông qua hàm app.listen. Ở đây mình sử dụng port 3000 các bạn có thể sử dụng port khác tùy ý
CREATE TABLE `testapi`.`sinhvien` ( `id` INT NOT NULL AUTO_INCREMENT , `name` VARCHAR(100) NOT NULL , `class` varchar(255), `dob` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP , PRIMARY KEY (`id`)) ENGINE = InnoDB
Để connect tới database mysql ta tạo file Dbconnection.js và import package mysql vào:
var mysql=require('mysql'); var connection=mysql.createPool({ host:'localhost', user:'root', password:', database:'testapi' }); module.exports=connection;
chúng ta thay đổi các thông tin sau cho phù hợp với server của bạn:
host: địa chỉ server database user: tên truy cập vào database password: password truy cập vào database database: Tên database
Ta tạo model có các function tương ứng: getAllSinhVien : get toàn bộ sinh viên getSinhVienById: get sinh viên theo id addSV: thêm mới sinh viên deleteSV: delete sinh viên updateSV: update sinh viên
var db = require('../Dbconnection'); var SinhVien={ getAllSinhVien:function(callback){ return db.query("Select * from sinhvien",callback); }, getSinhVienById:function(id,callback){ return db.query("select * from sinhvien where Id=?",[id],callback); }, addSV:function(sinhvien,callback){ return db.query("Insert into sinhvien(name,class,dob) values(?,?,?)",[sinhvien.name,sinhvien.class,sinhvien.dob],callback); }, deleteSV:function(id,callback){ return db.query("delete from sinhvien where Id=?",[id],callback); }, updateSV:function(id,sinhvien,callback){ return db.query("update sinhvien set name=?,class=?,dob=? where Id=?",[sinhvien.name,sinhvien.class,sinhvien.dob,id],callback); } }; module.exports=SinhVien;
Tạo file routes.js để điều hướng khi ta input url tương ứng
var express = require('express'); var router = express.Router(); var SinhVien = require('./Models/SinhVien'); router.get('/:id?',function(req,res,next){ if(req.params.id){ SinhVien.getSinhVienById(req.params.id,function(err,rows){ if(err){ res.json(err); } else{ res.json(rows); } }); }else{ SinhVien.getAllSinhVien(function(err,rows){ if(err){ res.json(err); } else { res.json(rows); } }); } }); router.post('/',function(req,res,next){ SinhVien.addSV(req.body,function(err,count){ if(err){ res.json(err); } else{ res.json(req.body); } }); }); router.delete('/:id',function(req,res,next){ SinhVien.deleteSV(req.params.id,function(err,count){ if(err){ res.json(err); } else{ res.json(count); } }); }); router.put('/:id',function(req,res,next){ SinhVien.updateSV(req.params.id,req.body,function(err,rows){ if(err){ res.json(err); } else{ res.json(rows); } }); }); module.exports=router;
Chúng ta quay lại server.js và add thêm nội dung sau để import sử dụng dbconnection và routes vừa tạo
var connection = require('./Dbconnection'); var routes = require('./routes'); app.use('/',routes);
chạy câu lệnh để khởi động server:
node server.js
sau đó bạn có thế dùng POSTMAN của chrome để test ví dụ dùng method GET trong postman GitHub code: https://github.com/bacalepr1992/RESTfullApi