Bài 24-NodeJS RESTful Web Services – Phần 3


Trong bài 23 các bạn đã biết cách tạo API với phương thức HTTPGET để lấy toàn bộ danh sách sản phẩm rồi. Bài này Ta tiếp tục với HTTPGET để lấy thông tin chi tiết của 1 Sản Phẩm.

Ta tiếp tục mở Project NodejsRESTful ở bài 23 lên nhé và nhớ là vẫn sử dụng Cơ sở dữ liệu MongoDB tên QuanLySanPham đã tạo ở các bài trước.

Ngay bên dưới API lấy chi tiết Product, các bạn bổ sung lệnh sau:


/**
*
* coding tạo API lấy chi tiết Product
* Cú pháp: '/products/:id'
* =>URI khi chạy: http://localhost:1337/products/P1 để lấy Product có mã là P1
* Ngoài ra bạn có thể '/:id'
* =>URI khi chạy: http://localhost:1337/P1
* Tuy nhiên ta nên cho phân cấp như trong ví dụ này để biết rằng nó thuộc nhóm products
* http://localhost:1337/products/P1 sẽ dễ hiểu hơn
*/
app.get('*/products/:id', function (req, res) {
//lấy được giá trị truyền vào từ URI:
var MaTim = req.params.id
res.writeHead(200, { 'Content-Type': 'text/json; charset=utf-8' });
MongoClient.connect(url, function (err, db) {
if (err) throw err;
//tạo điều kiện lọc theo Mã
//nó có cú pháp là 1 Json { Ma: MaTim } thì Ma là tên cột, MaTim là giá trị ta muốn lọc
//MaTim lấy từ req.params.id
var query = { Ma: MaTim }
//Kết nối Cơ sở dữ liệu QuanLySanPham
var dbo = db.db("QuanLySanPham");
//truy vấn dữ liệu từ bảng Product và lọc theo MaTim
dbo.collection("Product").findOne(query, function (err, result) {
if (err) throw err;
console.log(result);
//đưa dữ liệu lấy được về JSON
var s = JSON.stringify(result);
//xuất ra client
res.end(s);
//xong session thì đóng kết nối
db.close();
});
});
})

Cuối cùng file server.js ta có tất cả các Coding như sau:


//gọi thư viện express
var express = require('express');
//tạo đối tượng có kiểu express()
var app = express();
//gọi thư viện fs
var fs = require("fs");
//khai báo PORT mặc định khi chạy(từ hệ thống, nó có PORT nào thì lấy PORT đó)
var port = process.env.PORT;
//chuỗi kết nối tới Cơ sở dữ liệu MongoDB
var url = "mongodb://localhost:27017/";
//Gọi thư viện mongoDB và khởi tạo đối tượng cho nó
var MongoClient = require('mongodb').MongoClient;
/**
* Coding tạo HTTPGET lấy toàn bộ danh sách sản phẩm
* '/products' có nghĩa là URI để lấy toàn bộ sản phẩm
* ta thích đặt gì cũng được, tuy nhiên vì danh sách nên có số nhiều là s (hoặc có chữ list cho dễ phân biệt)
* chẳng hạn như: http://localhost:1337/products
*/
app.get('*/products', function (req, res) {
//thiết lập lấy dữ liệu với UTF-8
res.writeHead(200, { 'Content-Type': 'text/json; charset=utf-8' });
MongoClient.connect(url, function (err, db) {
if (err) throw err;
//kết nối Cơ sở dữ liệu MongoDB tên là QuanLySanPham
var dbo = db.db("QuanLySanPham");
//truy vấn toàn bộ dữ liệu trong bảng Product:
dbo.collection("Product").find({}).toArray(function (err, result) {
if (err) throw err;
console.log(result);
//đưa về JSON
var s = JSON.stringify(result);
//xuất ra Client:
res.end(s);
//đóng kết nối CSDL khi xong session
db.close();
});
});
})
/**
*
* coding tạo API lấy chi tiết Product
* Cú pháp: '/products/:id'
* =>URI khi chạy: http://localhost:1337/products/P1 để lấy Product có mã là P1
* Ngoài ra bạn có thể '/:id'
* =>URI khi chạy: http://localhost:1337/P1
* Tuy nhiên ta nên cho phân cấp như trong ví dụ này để biết rằng nó thuộc nhóm products
* http://localhost:1337/products/P1 sẽ dễ hiểu hơn
*/
app.get('*/products/:id', function (req, res) {
//lấy được giá trị truyền vào từ URI:
var MaTim = req.params.id
res.writeHead(200, { 'Content-Type': 'text/json; charset=utf-8' });
MongoClient.connect(url, function (err, db) {
if (err) throw err;
//tạo điều kiện lọc theo Mã
//nó có cú pháp là 1 Json { Ma: MaTim } thì Ma là tên cột, MaTim là giá trị ta muốn lọc
//MaTim lâsy từ req.params.id
var query = { Ma: MaTim }
//Kết nối Cơ sở dữ liệu QuanLySanPham
var dbo = db.db("QuanLySanPham");
//truy vấn dữ liệu từ bảng Product và lọc theo MaTim
dbo.collection("Product").findOne(query, function (err, result) {
if (err) throw err;
console.log(result);
//đưa dữ liệu lấy được về JSON
var s = JSON.stringify(result);
//xuất ra client
res.end(s);
//xong session thì đóng kết nối
db.close();
});
});
})
/**
* Chạy Server
*/
var server = app.listen(port, function () {

var host = server.address().address
var port = server.address().port

console.log("Example app listening at http://%s:%s", host, port)

})

Nhấn F5 để chạy và gõ URI http://localhost:1337/products/P1 , ta có kết quả:

Ta có thể thử nghiệm với PostMan:

Mục 1: Chọn GET vì API này dùng Method GET

Mục 2: Nhập URI http://localhost:1337/products/P1

Mục 3: Nhấn SEND

Mục 4: Xem kết quả

Như vậy các bạn đã biết cách viết HTTPGET đầu tiên trong các phương thức phổ biến của RESTful.

Source code HTTPGET lấy chi tiết Product tải ở đây.

Bài sau Tui sẽ hướng dẫn các Thím cách viết HTTPPOST để thêm mới Product, và sau đó là HTTPPUT, HTTPDELETE. Các bạn chú ý theo dõi nhé

Các khóa học online khác, bạn có thể tham khảo tại đây: http://communityuni.com/

Innovate Trading System (Kênh đầu tư lợi nhuận rất cao), các bạn nào quan tâm thì vào đây đầu tư nhé:

Chúc các bạn thành công!

3 responses

  1. […] tục WEB API cho NodeJS nha, ta mở lại Project ở bài 24. Để làm HTTPOST, cụ thể là viết API cho phép client gửi thông tin của một […]

  2. […] vậy là các Thím đã làm được HTTPGET (bài 23, bài 24) và HTTPPOST (bài 25). Tiếp tục WEB API cho NodeJS nha, ta mở lại Project ở bài 25 […]

  3. […] vậy là các Thím đã làm được HTTPGET (bài 23, bài 24) và HTTPPOST (bài 25), HTTPPUT(bài 26). Bây giờ ta qua Method phổ biến cuối cùng đó […]

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

%d bloggers like this: