Bài 23-NodeJS RESTful Web Services – Phần 2

Bài 22 Tui đã nói sơ qua về RESTful và làm 1 ví dụ nhỏ về cách tạo Restful đọc dữ liệu từ JSON trong NodeJS. Ở bài này ta viết API lấy danh sách Product trong MongoDB dùng method HTTPGET, sử dụng PostMan(cách dùng PostMan nếu chư biết xem ở đây) để kiểm thử API, Visual Studio để debug gỡ lỗi chương trình. Và Cơ sở dữ liệu MongoDB vẫn là QuanLySanPham trong chuỗi bài học này nha.

Tạo một Project tên NodejsRESTful(cách tạo Project nếu chưa biết xem tại đây)

Vì Project của ta phải làm 2 nhiệm vụ: tương tác dữ liệu MongoDB và tạo RESTful do đó ta phải thêm 2 thư viện:

  • Express (tạo RESTful)
  • MongoDB

Để thêm Express ta làm như sau: Bấm chuột phải vào npm/chọn Install New npm Packages...

Tìm tới Express nhìn hình dưới đây:

Bấm Install Package để cài đặt

Tiếp tục lặp theo tác tìm và cài đặt MongoDB:

Bấm Install Package để cài đặt thư viện

Cuối cùng Project của ta sẽ tham chiếu tới 2 thư viện như hình dưới đầy là thành công:

Tiếp tục mở server.js coding như sau để xử lý:

Bước 1: Gọi thư viện và khởi tạo các biến

[code language=”javascript”]

//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;

[/code]

Tạo HTTPGET trong NodeJs như sau:

[code language=”javascript”]

/**
* 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();
});
});
})

[/code]

Cuối cùng coding để chạy Server, lắng nghe ở Port quy định nào đó:

[code language=”javascript”]

/**
* 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)

})

[/code]

Cuối cùng ta có Coding đầy đủ như sau cho file server.js:

[code language=”javascript”]

//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();
});
});
})
/**
* 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)

})

[/code]

Nhấn F5 để chạy phần mềm ta có:

Ngoài ra, ta mở PostMan lên để kiểm thử kết quả (Thím nào chưa biết PostMan là gì thì vào link này):

Trong PostMan để thử method HTTPGET, ta chọn GET (mục 1), nhập đường link URI (mục 2), bấm SEND (mục 3) để triệu gọi service, mục 4 là kết quả.

Đặc biệt nếu ở Visual Studio các Thím muốn debug xem lỗi liếc chỗ nào thì cứ đặt break point ngay chỗ kiểu tra. Lúc bấm Send ở PostMan nó sẽ tự động nhảy vào Visual Studio ngay chỗ Break point cho các Thím debug (dĩ nhiên công cụ nào cũng được không nhất thiết là PostMan kể cả trình duyệt).

Ví dụ: Đặt break point ở Visual ngay chỗ dòng 25 và 33 (click chuột ở ngoài lề hoặc nhật F9 ngay dòng ta đứng):

ở PostMan nhấn Send ta thấy nó tự động back về Visual Studio cho ta Debug (rất hay):

Dùng F10, F11 để Debug xem lỗi liếc chỗ nào, rất hay nha. Nếu kiểm thử API trên PostMan chạy thành công thì hầu như 100% coding từ các thiết bị khác đều phải thành công (nếu không là do bạn lập trình củ chuối).

Ngoài ra các Thím cũng cần tập đưa nó lên IISNode Server nha để nó chạy 24/7 không cần phải có Visual Studio, xem hướng dẫn tại bài này

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 danh sách Product tải ở đây.

Bài sau Tui sẽ hướng dẫn các Thím HTTPGET về lấy thông tin chi tiết của 1 Product và tiếp theo là các Method HTTPPOST, 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:

https://unica.vn/?aff=11929

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