- vừa được xem lúc

Xây dựng Restful Api bằng Nodejs

0 0 46

Người đăng: PHẠM HOÀNG KIM

Theo Viblo Asia

Mở đầu

Thực ra là không có mở đầu gì đâu mà hay làm ngay bước tiếp theo ! 🤣🤣🤣

Tạo cơ sở dữ liệu

Chúng ta sẽ tạo bảng Băng đĩa với các trường sau ( id băng đĩa, tên băng đĩa, thể loại, nhà sản xuất, nội dung, giá ).

drop database if exists my_db;
create database my_db default character set utf8 collate utf8_unicode_ci;
use my_db;
-- tạo bảng băng đĩa
create table if not exists bangdia
( id int primary key auto_increment, tenBangDia varchar(55), theLoai varchar(55), nhaSX varchar(55), noiDung varchar(255), gia float
);
-- thêm dữ liệu vào bảng
insert into bangdia(tenBangDia,theLoai,nhaSX,noiDung,gia) values ('Doremon1','Hoạt hình','Nhật bổn','Không rõ','12.101'),
('Doremon2','Hoạt hình','Nhật bổn','Không rõ','12.202'),
('Doremon3','Hoạt hình','Nhật bổn','Không rõ','12.303');

Sau khi chạy đoạn mã trên(ở đây mình dùng MySQL) ta được kết quả sau:

image.png

Xây dựng server

Đầu tiên mình sẽ tạo 1 folder demo sau đó mở cmd dùng lệnh npm init để khởi tạo project. Sau đó ta sẽ có 1 file package.json với nội dụng như bên dưới.

{ "name": "demo", "version": "1.0.0", "description": "demo Restful api with Nodejs", "main": "index.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, "author": "phamkim", "license": "ISC"
}

Tiếp theo:

  1. Tạo file index.js ở thư mục gốc

  2. Tạo thư mục app. Bên trong chứa các thư mục con sau common, controllers, modals, routers.

    image.png

  3. Cài các package cần thiết như express, nodemon, mysql, dotenv.

npm install express --save
npm install --save-dev nodemon
npm install mysql --save
npm install dotenv --save
npm install body-parser --save

Cập nhật file package.json.

{ "name": "demo", "version": "1.0.0", "description": "", "main": "index.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1", "start": "node index.js", "dev": "nodemon index.js" }, "author": "", "license": "ISC", "dependencies": { "dotenv": "^16.0.0", "express": "^4.17.3", "mysql": "^2.18.1" }, "devDependencies": { "nodemon": "^2.0.15" }
}

Trong file index.js ta copy/paste đoạn mã sau.

let express = require('express');
let app = express();
let port = process.env.PORT || 3000; app.listen(port); console.log('RESTful API server started on: ' + port);

Sau đó chạy lệnh npm run dev trong terminal và được kết quả như sau.

image.png

Kết nối cơ sở dữ liệu

Đầu tiên chúng ta tạo file .env trong thư mục gốc.

HOST="localhost"
USER="root"
PASSWORD=""
DATABASE="my_db"

Tiếp theo, trong thư mục common tạo file connect.js

const mysql = require("mysql"); const db = mysql.createConnection({ host: process.env.HOST, user: process.env.USER, password: process.env.PASSWORD, database: process.env.DATABASE,
});
module.exports = db;

Chúng ta đã tạo được module kết nối csdl.

Tạo model

Trong thư mục model tạo file bangDia.controller.js

const db = require("../common/connect"); const BangDia = (bangDia) => { this.id = bangDia.id; this.tenBangDia = bangDia.tenBangDia; this.theLoai = bangDia.theLoai; this.nhaSX = bangDia.nhaSX; this.noiDung = bangDia.noiDung; this.gia = bangDia.gia;
}; BangDia.getById = (id, callback) => { const sqlString = "SELECT * FROM bangDia WHERE id = ? "; db.query(sqlString, id, (err, result) => { if (err) { return callback(err); } callback(result); });
}; BangDia.getAll = (callback) => { const sqlString = "SELECT * FROM bangDia "; db.query(sqlString, (err, result) => { if (err) { return callback(err); } callback(result); });
}; BangDia.insert = (bangDia, callBack) => { const sqlString = "INSERT INTO bangDia SET ?"; db.query(sqlString, bangDia, (err, res) => { if (err) { callBack(err); return; } callBack({ id: res.insertId, ...bangDia }); });
}; BangDia.update = (bangDia, id, callBack) => { const sqlString = "UPDATE bangDia SET ? WHERE id = ?"; db.query(sqlString, [bangDia, id], (err, res) => { if (err) { callBack(err); return; } callBack("cập nhật băng đĩa id = " + id + " thành công"); });
}; BangDia.delete = (id, callBack) => { db.query(`DELETE FROM bangDia WHERE id = ?`, id, (err, res) => { if (err) { callBack(err); return; } callBack("xóa băng đĩa id = " + id + " thành công"); });
}; module.exports = BangDia;

Tạo controller

Trong thư mục controllers tạo file bangDia.controller.js

const BangDia = require("../models/bangDia.model"); exports.getAll = (req, res) => { BangDia.getAll((result) => { res.send(result); });
}; exports.get = (req, res) => { const id = req.params.id; BangDia.get(id, (result) => { res.send(result); });
}; exports.insert = (req, res) => { const bangDia = req.body; BangDia.insert(bangDia, (result) => { res.send(result); });
}; exports.update = (req, res) => { const bangDia = req.body; BangDia.update(bangDia, (result) => { res.send(result); });
}; exports.delete = (req, res) => { const id = req.params.id; BangDia.delete(id, (result) => { res.send(result); });
}; 

Tạo router

Trong thư mục routers tạo file bangDia.router.js

module.exports = function (router) { const bangDiaController = require("../controllers/bangDia.controller"); router.get("/bangDia", bangDiaController.getAll); router.post("/bangDia", bangDiaController.insert); router.get("/bangDia/:id", bangDiaController.getById); router.delete("/bangDia/:id", bangDiaController.delete); router.put("/bangDia/:id", bangDiaController.update);
};

Cập nhật sever

Cập nhật file index.js

require("dotenv").config();
const express = require("express");
const app = express();
const port = process.env.PORT || 3000; const bodyParser = require("body-parser");
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json()); require("./app/routers/bangDia.router")(app); app.listen(port); console.log("RESTful API server started on: " + port);

File .env của mình như sau

HOST="localhost"
USER="root"
PASSWORD=""
DATABASE="my_db"
PORT=3000

Hãy cùng xem kết quả nào

  • Lấy danh sách băng đĩa image.png
  • cập nhật băng đĩa. Cập nhật tên của băng đĩa có id = 2 image.png
  • Lấy băng đĩa theo id = 2 image.png
  • xóa băng đĩa có id = 1 image.png
  • thêm băng đĩa mới image.png

Vậy là chúng ta đã tạo được 1 ứng dụng api nho nhỏ. Cảm ơn các bạn đã xem bài viết🥰🥰

Bình luận

Bài viết tương tự

- vừa được xem lúc

Áp dụng kiến trúc 3 Layer Architecture vào project NodeJS

The problem encountered. Các framework nodejs phổ biết như Express cho phép chúng ta dễ dàng tạo ra Resful API xử lí các request từ phía client một cách nhanh chóng và linh hoạt.

0 0 80

- vừa được xem lúc

Tìm hiểu về NestJS (Phần 2)

Trong bài viết trước, mình đã giới thiệu về NestJS và các thành phần cơ bản của framework này cũng như xây dựng demo một api bằng NestJS. Như mình đã giới thiệu, NestJS có một hệ sinh thái hỗ trợ cho chúng ta trong quá trình phát triển mà các framework khác như Express, Fastify,... phải tự build hoặ

0 0 170

- vừa được xem lúc

Xây dựng một REST API Skeleton với Node.js

Node.js đang dần trở nên phổ biến với những ứng dụng dạng microservice hay REST Api bới hiệu năng cực nhanh và tính bất đồng bộ của chúng.

0 0 44

- vừa được xem lúc

CORS là gì? CORS với Nodejs

CORS (hay Cross-origin resource sharing) là gì . . Lỗi cors trên trình duyệt:. .

0 0 72

- vừa được xem lúc

[K8S] Phần 15 - Triển khai ứng dụng NodeJS lên K8S

Giới thiệu. Trong các phần trước mình đã giới thiệu về cách dựng một hệ thống Kubernetes Cluster với khá đầy đủ các thành phần cần thiết như:.

0 0 41

- vừa được xem lúc

Nhắc các cuộc họp trên Google Calendar của bạn bởi Bot Telegram

Hôm nay là ngày 25/09/2022, khoảng 8h sáng đang mơ mơ màng màng trên chiếc giường ngủ, và có những tiếng chuông điện thoại reo lên từ đám bạn rủ rê đi bơi, đi cà phê:. "Sao chủ nhật nào cũng phải gọi

0 0 47