12/08/2018, 15:47

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

0