Phần 12: NodeJS – Utility Module – NodeJS căn bản cho người mới bắt đầu

Phần  12: NodeJS – Utility Module                        – NodeJS căn bản cho người mới bắt đầu
  1. Bài 12: NodeJS – Utility Module
    – NodeJS căn bản cho người mới bắt đầu
Thư viện Node.js Module cung cấp khá nhiều Utility Module giúp ích bạn nhiều trong khi phát triển những ứng dụng về Node.js. Bảng sau đây liệt kê và miêu tả các Utility Module này.
  • os Module : Cung cấp các hàm tiện ích căn bản liên quan đến HĐH.
  • path Module : Cung cấp những tiện ích để xử lý và biến đổi link đến file.
  • web Module : Hoạt động như là Network Wrapper, biến Server và Client thành các Stream.
  • dns Module : Cung cấp các hàm để thực hiện DNS Lookup.
  • area Module : Được dùng để can thiệp những lỗi chưa được xử lý

1. OS Module trong Node.js

os Module trong Node.js cung cấp các hàm tiện ích căn bản liên quan tới HĐH. Module này có thể được import do cú pháp dưới đây:
var os = require("os")
Phương thức của os Module trong Node.js
  1. os.tmpdir() : Trả về folder mặc định cho những file tạm thời
  2. os.hostname() : Trả về hostname của HĐH.
  3. os.kind() : Trả về tên của HĐH.
  4. os.platform() : Trả về nền tảng của HĐH.
  5. os.arch() : Trả về cấu trúc CPU của HĐH.
  6. os.totalmem() : Trả về tổng dung lượng bộ nhớ (đơn vị byte).
  7. os.freemem() : Trả về tổng dung lượng bộ nhớ chưa dùng tới (đơn vị byte).
  8. os.cpus() : Trả về mảng đối tượng chứa các thông tin về CPU/core: mannequin, velocity (giá trị MHz), và thời gian.
  9. os.communityInterfaces() : Lấy danh sách các Network Interface.
Thuộc tính của os Module trong Node.js
os.EOL: 1 hằng số định nghĩa End-Of-Line cho HĐH.
Ví dụ
Dưới đây chính là ví dụ minh họa những phương thức của os Module trong Node.js. Bạn tạo essential.js có nội dung sau:
var os = require("os"); // In thong tin ve kieu cua OS 
console.log('OS Type la: ' + os.kind()); // In thong tin ve OS platform 
console.log('OS Platform : ' + os.platform()); // In thong tin ve tong dung luong bo nho 
console.log('Tong dung luong bo nho : ' + os.totalmem() + " byte."); // In thong tin ve tong dung luong bo nho roi 
console.log('Tong dung luong bo nho roi : ' + os.freemem() + " byte.");
Chạy essential.js để xem kết quả::
$ node essential.js
Kiểm tra kết quả:
OS Type la : LinuxOS Platform : linuxTong dung luong bo nho : 25103400960 byte.Tong dung luong bo nho roi : 20676710400 byte.

2. Path Module trong Node.js

path Module trong được dùng để Resolve và chuyển đổi những đường dẫn đến file. Module này có thể được inport theo cú pháp:
var path = require("path")
Phương thức của path Module trong Node.js
  1. path.normalize(p) : Chuẩn hóa link
  2. path.be a part of([path1][, path2][, …]) : Kết hợp toàn bộ các tham số là link với nhau và rồi chuẩn hóa link kết quả tạo nên
  3. path.resolve([from …], to) : Resolve 1 link tuyệt đối.
  4. path.isAbsolute(path) : Xác định xem đó có phải là link tuyệt đối không. 1 link tuyệt đối luôn trỏ tới cùng 1 vị trí, bất kể folder đang làm việc là gì.
  5. path.relative(from, to) : Resolve 1 link khá.
  6. path.dirname(p) : Trả về tên folder của 1 link.
  7. path.basename(p[, ext]) : Trả về phần cuối cùng của 1 link
  8. path.extname(p) : Trả về đuôi của link (ví dụ txt)
  9. path.parse(pathString) : Trả về 1 đối tượng từ 1 chuỗi biểu diễn link
  10. path.format(pathObject) : Trả về 1 chuỗi biểu diễn link từ 1 đối tượng, phương thức này trái ngược với phương thức path.parse trên.
Thuộc tính của path Module trong Node.js:
  1. path.sep : Biểu thị File Separator của nền tảng chi tiết. Nó có thể là ‘\’ hay ‘/’.
  2. path.delimiter : iểu thị Path Delimiter của nền tảng chi tiết, có thể là ‘;’ hay ‘:’.
Ví dụ
Ví dụ sau đây minh họa cách sử dụng những phương thức và thuộc tính của pathModule trong Node.js. Bạn tạo essential.js có nội dung sau:
var path = require("path"); // Chuan hoa duong dan voi phuong thuc normalize() 
console.log('Phuong thuc NORMALIZE : ' + path.normalize('/take a look at/test1//2slashes/1slash/tab/..')); // Ket hop cac tham so dau vao de tao mot duong dan 
console.log('Phuong thuc JOIN : ' + path.be a part of('/take a look at', 'test1', '2slashes/1slash', 'tab', '..')); // Resolve mot duong dan tuyet doi 
console.log('Phuong thuc RESOLVE : ' + path.resolve('essential.js')); // Lay thong tin cua duoi duong dan 
console.log('Phuong thuc EXTNAME : ' + path.extname('essential.js'));
Chạy essential.js để xem kết quả::
$ node essential.js
Kiểm tra kết quả.
Phuong thuc NORMALIZE : /take a look at/test1/2slashes/1slashPhuong thuc JOIN : /take a look at/test1/2slashes/1slashPhuong thuc RESOLVE : /internet/com/1427176256_27423/essential.jsPhuong thuc EXTNAME : .js

3. Net Module trong Node.js

web Module trong Node.js được dùng để tạo Server và Client. Module này cung cấp 1 Network Wrapper không đồng bộ và có thể được import với cú pháp:
var web = require("web")
  1. web.createServer([options][, connectionListener])
    Tạo 1 TCP Server mới. Tham số connectionListener tự động được thiết lập để thành 1 Listener cho sự kiện ‘connection’.
  2. web.join(choices[, connectionListener])
    Đây chính là 1 phương thức manufacturing unit, trả về 1 ‘web.Socket’ mới và kết nối đến deal with và port đã cho.
  3. web.createConnection(choices[, connectionListener])
    Đây chính là 1 phương thức manufacturing unit, trả về 1 ‘web.Socket’ mới và kết nối đến deal with và port đã cho.
  4. web.join(port[, host][, connectListener])
    Tạo 1 kết nối TCP đến port trên host đã cho. Nếu như host không được cung cấp, thì giá trị mặc định là ‘localhost’. Tham số joinListener sẽ được cho thêm vào như là Listener cho sự kiện ‘join’.
  5. web.createConnection(port[, host][, connectListener])
    Tạo 1 kết nối TCP đến port trên host đã cho. Nếu như host không được cung cấp, thì giá trị mặc định là ‘localhost’. Tham số joinListener sẽ được cho thêm vào như là Listener cho sự kiện ‘join’.
  6. web.join(path[, connectListener])
    Tạo 1 kết nối Unix Socket đến link đã cho. Tham số joinListener sẽ được cho thêm vào như là Listener cho sự kiện ‘join’.
  7. web.createConnection(path[, connectListener])
    Tạo 1 kết nối Unix Socket đến link đã cho. Tham số joinListener sẽ được cho thêm vào như là Listener cho sự kiện ‘join’.
  8. web.isIP(enter)
    Kiểm tra xem enter có phải là 1 địa chỉ IP deal with không. Trả về giá trị 0 cho 1 chuỗi không hợp lệ, 4 cho bản địa chỉ IP v4, và trả về 6 cho địa chỉ IP v6.
  9. web.isIPv4(enter)
    Trả về true nếu như enter là địa chỉ IP v4, nếu như không là false.
  10. web.isIPv6(enter)
    Trả về true nếu như enter là địa chỉ IP v6, nếu như không là false.

Lớp web.Server trong Node.js

Lớp web.Server được sử dung để tạo 1 TCP Server hay Local Server.
Phương thức của lớp web.Server trong Node.js
  1. server.pay attention(port[, host][, backlog][, callback])
    Bắt đầu chấp nhận kết nối trên port và host đã cho. Nếu như không cung cấp tham số host, Server sẽ chấp nhận các kết nối trực tiếp đến bất kỳ địa chỉ IPv4 nào (INADDR_ANY). Nếu như giá trị port là 0 sẽ gán 1 port ngẫu nhiên.
  2. server.pay attention(path[, callback])
    Khởi động 1 Local Server để nghe các kết nối trên path đã cho.
  3. server.pay attention(deal with[, callback])
    Đối tượng deal with có thể được thiết lập cho Server hay Socket. Việc này làm Server chấp nhận kết nối đến 1 deal with chi tiết.
  4. server.pay attention(choices[, callback])
    Tham số choices có thể là các thuộc tính port, host, và backlog. Tham số callback là 1 hàm callback thoải mái mà làm việc như khi gọi đến phương thức server.pay attention(port, [host], [backlog], [callback]) .
  5. server.shut([callback])
    Đóng toàn bộ các kết nối đã kết thúc và Server sinh 1 sự kiện ‘shut’.
  6. server.deal with()
    Trả về 1 địa chỉ certain deal with và port của Server, như được báo cáo do HĐH.
  7. server.unref()
    Việc gọi phương thức unref trên 1 Server sẽ cho phép chương trình thoát ra.
  8. server.ref()
    Trái ngược với phương thức unref(), việc gọi phương thức ref() sẽ không cho phép chương trình thoát ra.
  9. server.getConnections(callback)
    Lấy số các kết nối bên cạnh đó trên 1 Server 1 cách không đồng bộ. Hàm callback nên nhận 2 tham số err (để Resolve lỗi) và rely (để đếm).
Sự kiện của lớp web.Server trong Node.js
  • listening
    Xảy ra khi Server được gắn kết sau 1 lời gọi đến server.pay attention.
  • connection
    Xảy ra khi tạo 1 kết nối mới
  • shut
    Xảy ra khi đóng Server
  • error
    Xảy ra khi xuất hiện bất kỳ lỗi nào. Sự kiện ‘shut’ sẽ trực tiếp được gọi sau sự kiện này.

Lớp web.Socket trong Node.js

Đối tượng này là lớp trừu tượng của TCP hay Local Socket. web.Socket kế thừa duplex Stream interface. Chúng có thể được tạo do người sử dụng hay do 1 Client (do phương thức join()) hay có thể được tạo do Node.js và truyền đến người sử dụng qua sự kiện ‘connection’ của 1 Server.
Sự kiện của web.Socket trong Node.js
web.Socket là 1 occasionEmitter và nó sinh những sự kiện sau.
  1. lookup
    Xảy ra sau khi đã Resolve 1 hostname nhưng trước khi kết nối
  2. join
    Xảy ra khi 1 kết nối Socket được thiết lập thành công
  3. knowledge
    Xảy ra khi dữ liệu được nhận. Tham số knowledge sẽ là 1 Buffer hay String. Phần mã hóa của knowledge được thiết lập do socket.setEncoding().
  4. error
    Xảy ra khi xuất hiện bất kỳ lỗi nào. Sự kiện ‘shut’ sẽ được gọi trực tiếp sau sự kiện này.
  5. shut
    Xảy ra khi Socket được đóng.
Thuộc tính của web.Socket trong Node.js
web.Socket có nhiều thuộc tính có ích giúp các bạn điều khiển tốt hơn ở trong việc tương tác với Socket.
  1. socket.bufferSize
    Thuộc tính này chỉ số lượng ký tự được đệm
  2. socket.distantAddress
    Biểu diễn chuỗi của địa chỉ Remote IP.
  3. socket.distantFamily
    Biểu diên chuỗi của Remote IP Family. Đó là ‘IPv4’ hay ‘IPv6’.
  4. socket.distantPort
    Biểu diễn dạng số của Remote Port. Ví dụ 80 hay 21.
  5. socket.nativeAddress
    Biểu diễn chuỗi của địa chỉ Local IP mà 1 Remote Client kết nối đến. Ví dụ, nếu như bạn đang lắng nghe trên ‘0.0.0.0’ và Client kết nối trên ‘192.168.1.1’, thì giá trị sẽ là ‘192.168.1.1’.
  6. socket.nativePort
    Biểu diễn dạng số của Local Port. Ví dụ 80 hay 21.
  7. socket.bytesRead
    Số lượng byte đã được nhận.
  8. socket.bytesWritten
    Số lượng byte được gởi.
Phương thức của web.Socket trong Node.js
  1. new web.Socket([options])
    Xây dựng 1 đối tượng Socket mới.
  2. socket.join(port[, host][, connectListener])
    Mở kết nối cho 1 Socket đã cho. Nếu như bạn cung cấp 2 tham số port và host, thì khi ấy Socket sẽ được mở dưới dạng như là 1 TCP Socket. Nếu như bạn không cung cấp host, thì giá trị mặc định là localhost. Nếu như bạn cung cấp tham số path, thì Socket sẽ đươc mở dưới dạng như 1 Unix Socket đến link path đó.
  3. socket.join(path[, connectListener])
    Mở kết nối cho 1 Socket đã cho. Nếu như bạn cung cấp 2 tham số port và host, thì khi ấy Socket sẽ được mở dưới dạng như là 1 TCP Socket. Nếu như bạn không cung cấp host, thì giá trị mặc định là localhost. Nếu như bạn cung cấp tham số path, thì Socket sẽ đươc mở dưới dạng như 1 Unix Socket đến link path đó.
  4. socket.setEncoding([encoding])
    Thiết lập mã hóa encoding cho Socket dưới dạng như 1 Readable Stream.
  5. socket.write(knowledge[, encoding][, callback])
    Gởi dữ liệu trên Socket. Tham số thứ 2 xác định mã hóa trong trường hợp dữ liệu dạng chuỗi. Mã hóa mặc định là UTF8.
  6. socket.destroy()
    Bảo đảm rằng không có bất kỳ hoạt động I/O xảy ra trên Socket này. Phương thức này chỉ việc thiết khi xuất hiện lỗi.
  7. socket.pause()
    Tạm ngừng việc đọc dữ liệu. Do đó sự kiện ‘knowledge’ không được sinh
  8. socket.resume()
    Tiếp tục việc đọc dữ liệu sau khi đã tạm ngừng với phương thức pause().
Ví dụ
Dưới đây chính là ví dụ minh họa những phương thức và thuộc tính của web Module trong Node.js.
Tạo server.js có nội dung:
var web = require('web');
var server = web.createServer(operate(connection)
{ console.log('Ket noi voi Client');
connection.on('finish', operate()
{ console.log('Mat ket noi voi Client'); });
connection.write('Hello World!rn'); 
connection.pipe(connection); }); 
server.pay attention(8080, operate() 
{ console.log('Server dang lang nghe'); });
Chạy server.js để xem kết quả:
$ node server.js
Kiểm tra kết quả.
Server dang lang nghe
Tiếp đó, bạn tạo shopper.js như sau đây
var web = require('web'); 
var shopper = web.join({port: 8080}, operate() 
{ console.log('Da ket noi voi Server!'); }); 
shopper.on('knowledge', operate(knowledge)  console.log(knowledge.toString()); 
shopper.finish(); ); shopper.on('finish', operate() 
{ console.log('Mat ket noi voi Server'); });
Chạy shopper.js trên 1 màn hình terminal khác để xem kết quả:
$ node shopper.js
Kiểm tra kết quả.
Da ket noi voi Server!Hello World!Mat ket noi voi Server
Kiểm tra kết quả trên màn hình Terminal đang chạy server.js:
Server dang lang ngheKet noi voi ClientMat ket noi voi Client

4. DNS Module trong Node.js

dns Module trong Node.js được dùng để thực hiện DNS Lookup. Module cung cấp 1 Network Wrapper không đồng bộ và có thể được import với cú pháp.
var dns = require("dns")
  1. dns.lookup(hostname[, options], callback)
    Resolve 1 hostname (ví dụ ‘google.com’) vào trong phiên bản ghi A (IPv4) hay AAAA (IPv6) đầu tiên được tìm thấy. Tham số choices có thể là 1 đối tượng hay những nguyên. Nếu như bạn không cung cấp tham số choices, thì các địa chỉ IP v4 và v6 đều hợp lệ. Nếu như choices là những nguyên, thì nó phải là 4 hay 6.
  2. dns.lookupService(deal with, port, callback)
    Resolve 1 deal with và port đã cho vào trong 1 hostname
  3. dns.resolve(hostname[, rrtype], callback)
    Resolve 1 hostname (ví dụ ‘google.com’) vào trong 1 mảng những kiểu bản ghi được xác định do tham số rrtype.
  4. dns.resolve4(hostname, callback)
    Giống như dns.resolve(), nhưng chỉ cho các truy vấn IPv4 (1 truy vấn A).
  5. dns.resolve6(hostname, callback)
    Giống như dns.resolve4(), nhưng chỉ cho các truy vấn (1 truy vấn AAAA).
  6. dns.resolveMx(hostname, callback)
    Giống như dns.resolve(), nhưng chỉ cho các truy vấn Mail Exchange.
  7. dns.resolveTxt(hostname, callback)
    Giống như dns.resolve(), nhưng chỉ cho các truy vấn Text
  8. dns.resolveSrv(hostname, callback)
    Giống như dns.resolve(), nhưng chỉ cho các truy vấn SRV
  9. dns.resolveSoa(hostname, callback)
    Giống như dns.resolve(), nhưng chỉ cho các truy vấn SOA
  10. dns.resolveNs(hostname, callback)
    Giống như dns.resolve(), nhưng chỉ cho các truy vấn NS
  11. ns.resolveCname(hostname, callback)
    Giống như dns.resolve(), nhưng chỉ cho các truy vấn CNAME
  12. dns.reverse(ip, callback)
    Đảo ngược việc resolve 1 địa chỉ IP thành 1 mảng gồm các hostname

Giá trị rrtype của dns Module trong Node.sj

Danh sách dưới liệt kê những giá trị rrtypes được dùng do phương thức dns.resolve():
A – Giá trị mặc định là các địa chỉ IPV4
AAAA – Các địa chỉ IPV6
MX – Những bản ghi về Mail Exchange
TXT – Những bản ghi về Text
SRV – Những bản ghi về SRV
PTR – Được dùng để đảo chiều IP Lookup
NS – Những bản ghi về Name Server
CNAME – Những bản ghi về Canonical Name
SOA – Là viết tắt của Start of Authority Record

Những Error Code của dns Module trong Node.js

Mỗi truy vẫn DNS có thể trả về 1 trong các Error Code sau:
dns.NODATA – DNS Server trả về phản hồi mà không gồm dữ liệu nào.
dns.FORMERR – DNS Server thông báo truy vấn sai định dạng.
dns.SERVFAIL – DNS Server trả về 1 lỗi chung.
dns.NOTFOUND – Không tìm thấy tên miền.
dns.NOTIMP – DNS Server không triển khai hoạt động request.
dns.REFUSED – DNS Server từ chối truy vấn.
dns.BADQUERY – Truy vấn sai định dạng.
dns.BADNAME – Hostname sai định dạng.
dns.BADFAMILY – Address Family không được hỗ trợ.
dns.BADRESP – Phản hồi từ DNS sai định dạng.
dns.CONNREFUSED – Không thể kết nối đến DNS Server.
dns.TIMEOUT – Timeout trong khi kết nối đến DNS Server.
dns.EOF – Viết tắt của End of file.
dns.FILE – Xảy ra lỗi trong khi đọc file.
dns.NOMEM – Hết bộ nhớ.
dns.DESTRUCTION – Channel đang bị hủy.
dns.BADSTR – Chuỗi sai định dạng.
dns.BADFLAGS – Các Flag không hợp lệ.
dns.NONAME – Hostname không phải dưới dạng số.
Ví dụ
Ví dụ sau minh họa những phương thức của dns Module trong Node.js. Bạn tạo essential.js có nội dung sau:
var dns = require('dns'); 
dns.lookup('www.google.com', operate onLookup(err, deal with, household) 
{ console.log('Dia chi:', deal with); 
dns.reverse(deal with, operate (err, hostnames) 
{ if (err) { console.log(err.stack); } 
console.log('Phuong thuc REVERSE cho dia chi: ' + deal with + ' thanh mang cac hostname: ' + JSON.stringify(hostnames)); }); });
Chạy essential.js để xem kết quả::
$ node essential.js
Kiểm tra kết quả:
Dia chi: 173.194.46.83Phuong thuc REVERSE cho dia chi 173.194.46.83 thanh mang cac hostname: ["ord08s11-in-f19.1e100.net"]

5. Domain Module trong Node.js

area Module trong Node.js được dùng để can thiệp những lỗi chưa được xử lý. Những lỗi này có thể được can thiệp bằng việc dùng Internal Binding hay External Binding.
Internal Binding – Error Emmitter đang thực thi phần code của nó bên trong phương thức run của 1 Domain.
External Binding – Error Emmitter được cho thêm vào 1 Domain do sử dụng phương thức add.
Để sử dụng area Module trong Node.js, bạn phải import theo cú pháp sau.
var area = require("area")
Lớp Domain của area Module được dùng để cung cấp tính năng định tuyến các Error và Exception đến 1 đối tượng Domain. Lớp này là lớp con của lớp EventEmitter. Lớp Domain này xử lý những lỗi mà nó bắt được và lắng nghe sự kiện error của nó. Đối tượng này có thể được tạo do cú pháp:
var area = require("area"); var youngster = area.create();
Phương thức của area Module trong Node.js
  1. area.run(operate)
    Chạy hàm operate trong ngữ cảnh của area, bind toàn bộ các Event Emitter, Timer, và các Request tầm thấp mà được tạo trong ngữ cảnh đó. Đây chính là cách căn bản nhất để sử dụng 1 area.
  2. area.add(emitter)
    Thêm Emitter đến area. Nếu như có bất kỳ Event Handler nào được gọi do Emitter mà ném 1 Error, thì nó sẽ được định tuyến đến sự kiện error của area.
  3. area.take away(emitter)
    Trái ngược với phương thức area.add(emitter). Xóa Emitter nào đấy khỏi area.
  4. area.exit()
    Thoát khỏi area hiện giờ
Thuộc tính của area Module trong Node.js
area.members: 1 mảng các Timer và Event Emitter đã được cho thêm đến area.
Ví dụ
Ví dụ sau minh họa những phương thức của area Module trong Node.js. Bạn tạo essential.js có nội dung sau:
var EventEmitter = require("occasions").EventEmitter; 
var area = require("area"); 
var emitter1 = new EventEmitter(); // Tao mot area boi su dung phuong thuc create() 
var domain1 = area.create(); 
domain1.on('error', operate(err)
{ console.log("domain1 se xu ly loi: ("+err.message+")"); });
 // Them mot Emitter toi area boi phuong thuc add() 
domain1.add(emitter1); 
emitter1.on('error',operate(err)
{ console.log("listener se xu ly loi: ("+err.message+")"); }); 
emitter1.emit('error',new Error('Duoc xu ly boi listener')); 
emitter1.removeAllListeners('error'); 
emitter1.emit('error',new Error('Duoc xu ly boi domain1')); 
var domain2 = area.create(); domain2.on('error', operate(err)
{ console.log("domain2 se xu ly loi: ("+err.message+")"); });
 // Them mot Emitter toi area boi phuong thuc run() 
domain2.run(operate()
{ var emitter2 = new EventEmitter(); 
emitter2.emit('error',new Error('Duoc xu ly boi domain2')); }); 
domain1.take away(emitter1); 
emitter1.emit('error', new Error('Da chuyen doi thanh Exception. He thong bi pha vo!'));
Chạy essential.js để xem kết quả::
$ node essential.js
Kiểm tra kết quả:
listener se xu ly loi: (Duoc xu ly boi listener)domain1 se xu ly loi: (Duoc xu ly boi domain1)domain2 se xu ly loi: (Duoc xu ly boi domain2)occasions.js:72 throw er; // Unhandled 'error' occasion ^Error: Da chuyen doi thanh Exception. He thong bi pha vo! at Object. (/internet/com/1427722220_30772/essential.js:40:24) at Module._compile (module.js:456:26) at Object.Module._extensions..js (module.js:474:10) at Module.load (module.js:356:32) at Function.Module._load (module.js:312:12) at Function.Module.runMain (module.js:497:10) at startup (node.js:119:16) at node.js:906:3

 

 

admin

Leave a Reply

Your email address will not be published. Required fields are marked *