Utility Module trong Node.js

Thư viện Node.js Module cung cấp nhiều Utility Module giúp ích bạn rất nhiều trong khi phát triển các ứng dụng về Node.js. Bảng dưới đây liệt kê và miêu tả các Utility Module này.

Stt Tên Module & Miêu tả
1 os Module
Cung cấp các hàm tiện ích cơ bản liên quan tới hệ điều hành.
2 path Module
Cung cấp các tiện ích để xử lý và biến đổi đường dẫn tới file.
3 net Module
Hoạt động như là Network Wrapper, biến Server và Client thành các Stream.
4 dns Module
Cung cấp các hàm để thực hiện DNS Lookup.
5 domain Module
Được sử dụng để can thiệp các 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ơ bản liên quan đến hệ điều hành. Module này có thể được import bởi cú pháp sau đây:

var os = require("os")

Phương thức của os Module trong Node.js

Stt Phương thức & Miêu tả
1 os.tmpdir()
Trả về thư mục mặc định cho các file tạm thời
3 os.hostname()
Trả về hostname của Hệ điều hành.
4 os.type()
Trả về tên của Hệ điều hành.
5 os.platform()
Trả về nền tảng của Hệ điều hành.
6 os.arch()
Trả về cấu trúc CPU của Hệ điều hành.
7 os.totalmem()
Trả về tổng dung lượng bộ nhớ (đơn vị byte).
8 os.freemem()
Trả về tổng dung lượng bộ nhớ chưa dùng đến (đơn vị byte).
9 os.cpus()
Trả về mảng đối tượng chứa thông tin về CPU/core: model, speed (giá trị MHz), và thời gian.
10 os.networkInterfaces()
Lấy danh sách các Network Interface.

Thuộc tính của os Module trong Node.js

os.EOL: Một hằng số định nghĩa End-Of-Line cho Hệ điều hành.

Ví dụ

Dưới đây là ví dụ minh họa một số phương thức của os Module trong Node.js. Bạn tạo main.js có nội dung sau:

var os = require("os"); // In thong tin ve kieu cua OS console.log('OS Type la: ' + os.type()); // 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 main.js để xem kết quả::

$ node main.js

Kiểm tra kết quả:

OS Type la : Linux
OS Platform : linux
Tong dung luong bo nho : 25103400960 byte.
Tong dung luong bo nho roi : 20676710400 byte.

2. Path Module trong Node.js

path Module trong được sử dụng để Resolve và chuyển đổi các đường dẫn tới 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

Stt Phương thức & Miêu tả
1 path.normalize(p)
Chuẩn hóa đường dẫn
2 path.join([path1][, path2][, ...])
Kết hợp tất cả các tham số là đường dẫn với nhau và sau đó chuẩn hóa đường dẫn kết quả tạo ra
3 path.resolve([from ...], to)
Resolve một đường dẫn tuyệt đối.
4 path.isAbsolute(path)
Xác định xem đó có phải là đường dẫn tuyệt đối không. Một đường dẫn tuyệt đối luôn luôn trỏ đến cùng một vị trí, bất kể thư mục đang làm việc là gì.
5 path.relative(from, to)
Resolve một đường dẫn tương đối.
6 path.dirname(p)
Trả về tên thư mục của một đường dẫn.
7 path.basename(p[, ext])
Trả về phần cuối cùng của một đường dẫn
8 path.extname(p)
Trả về đuôi của đường dẫn (ví dụ txt)
9 path.parse(pathString)
Trả về một đối tượng từ một chuỗi biểu diễn đường dẫn
10 path.format(pathObject)
Trả về một chuỗi biểu diễn đường dẫn từ một đố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

Stt Thuộc tính & Miêu tả
1 path.sep
Biểu thị File Separator của nền tảng cụ thể. Nó có thể là '\\' hoặc '/'.
2 path.delimiter
Biểu thị Path Delimiter của nền tảng cụ thể, có thể là ';' hoặc ':'.

Ví dụ

Ví dụ dưới đây minh họa cách sử dụng một số phương thức và thuộc tính của path Module trong Node.js. Bạn tạo main.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('/test/test1//2slashes/1slash/tab/..')); // Ket hop cac tham so dau vao de tao mot duong dan console.log('Phuong thuc JOIN : ' + path.join('/test', 'test1', '2slashes/1slash', 'tab', '..')); // Resolve mot duong dan tuyet doi console.log('Phuong thuc RESOLVE : ' + path.resolve('main.js')); // Lay thong tin cua duoi duong dan console.log('Phuong thuc EXTNAME : ' + path.extname('main.js'));

Chạy main.js để xem kết quả::

$ node main.js

Kiểm tra kết quả.

Phuong thuc NORMALIZE : /test/test1/2slashes/1slash
Phuong thuc JOIN : /test/test1/2slashes/1slash
Phuong thuc RESOLVE : /web/com/1427176256_27423/main.js
Phuong thuc EXTNAME : .js

3. Net Module trong Node.js

net Module trong Node.js được sử dụng để tạo Server và Client. Module này cung cấp một Network Wrapper không đồng bộ và có thể được import với cú pháp:

var net = require("net")

Phương thức của net Module trong Node.js

Stt Phương thức & Miêu tả
1 net.createServer([options][, connectionListener])
Tạo một TCP Server mới. Tham số connectionListener tự động được thiết lập để thành một Listener cho sự kiện 'connection'.
2 net.connect(options[, connectionListener])
Đây là một phương thức factory, trả về một 'net.Socket' mới và kết nối tới address và port đã cho.
3 net.createConnection(options[, connectionListener])
Đây là một phương thức factory, trả về một 'net.Socket' mới và kết nối tới address và port đã cho.
4 net.connect(port[, host][, connectListener])
Tạo một kết nối TCP tới port trên host đã cho. Nếu host không được cung cấp, thì giá trị mặc định là 'localhost'. Tham số connectListener sẽ được thêm vào như là Listener cho sự kiện 'connect'.
5 net.createConnection(port[, host][, connectListener])
Tạo một kết nối TCP tới port trên host đã cho. Nếu host không được cung cấp, thì giá trị mặc định là 'localhost'. Tham số connectListener sẽ được thêm vào như là Listener cho sự kiện 'connect'.
6 net.connect(path[, connectListener])
Tạo một kết nối Unix Socket tới đường dẫn đã cho. Tham số connectListener sẽ được thêm vào như là Listener cho sự kiện 'connect'.
7 net.createConnection(path[, connectListener])
Tạo một kết nối Unix Socket tới đường dẫn đã cho. Tham số connectListener sẽ được thêm vào như là Listener cho sự kiện 'connect'.
8 net.isIP(input)
Kiểm tra xem input có phải là một địa chỉ IP address không. Trả về giá trị 0 cho một chuỗi không hợp lệ, 4 cho phiên bản địa chỉ IP v4, và trả về 6 cho địa chỉ IP v6.
9 net.isIPv4(input)
Trả về true nếu input là địa chỉ IP v4, nếu không là false.
10 net.isIPv6(input)
Trả về true nếu input là địa chỉ IP v6, nếu không là false.

Lớp net.Server trong Node.js

Lớp net.Server được sử dung để tạo một TCP Server hoặc Local Server.

Phương thức của lớp net.Server trong Node.js

Stt Phương thức & Miêu tả
1 server.listen(port[, host][, backlog][, callback])
Bắt đầu chấp nhận kết nối trên port và host đã cho. Nếu không cung cấp tham số host, Server sẽ chấp nhận các kết nối trực tiếp tới bất kỳ địa chỉ IPv4 nào (INADDR_ANY). Nếu giá trị port là 0 sẽ gán một port ngẫu nhiên.
2 server.listen(path[, callback])
Khởi động một Local Server để nghe các kết nối trên path đã cho.
3 server.listen(handle[, callback])
Đối tượng handle có thể được thiết lập cho Server hoặc Socket. Việc này làm cho Server chấp nhận kết nối tới một handle cụ thể.
4 server.listen(options[, callback])
Tham số options có thể là các thuộc tính port, host, và backlog. Tham số callback là một hàm callback tùy ý mà làm việc như khi gọi tới phương thức server.listen(port, [host], [backlog], [callback]) .
5 server.close([callback])
Đóng tất cả các kết nối đã kết thúc và Server sinh một sự kiện 'close'.
6 server.address()
Trả về một địa chỉ bound address và port của Server, như đã được báo cáo bởi Hệ điều hành.
7 server.unref()
Việc gọi phương thức unref trên một 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 đồng thời trên một Server một cách không đồng bộ. Hàm callback nên nhận hai tham số err (để Resolve lỗi) và count (để đếm).

Sự kiện của lớp net.Server trong Node.js

Stt Sự kiện & Miêu tả
1 listening
Xảy ra khi Server đã được gắn kết sau một lời gọi tới server.listen.
2 connection
Xảy ra khi tạo một kết nối mới
3 close
Xảy ra khi đóng Server
4 error
Xảy ra khi xuất hiện bất kỳ lỗi nào. Sự kiện 'close' sẽ trực tiếp được gọi sau sự kiện này.

Lớp net.Socket trong Node.js

Đối tượng này là lớp trừu tượng của TCP hoặc Local Socket. net.Socket kế thừa duplex Stream interface. Chúng có thể được tạo bởi người dùng hoặc bởi một Client (bởi phương thức connect()) hoặc có thể được tạo bởi Node.js và được truyền tới người dùng thông qua sự kiện 'connection' của một Server.

Sự kiện của net.Socket trong Node.js

net.Socket là một eventEmitter và nó sinh các sự kiện sau.

Stt Sự kiện & Miêu tả
1 lookup
Xảy ra sau khi đã Resolve một hostname nhưng trước khi kết nối
2 connect
Xảy ra khi một kết nối Socket được thiết lập thành công
3 data
Xảy ra khi dữ liệu đã được nhận. Tham số data sẽ là một Buffer hoặc String. Phần mã hóa của data được thiết lập bởi socket.setEncoding().
4 error
Xảy ra khi xuất hiện bất kỳ lỗi nào. Sự kiện 'close' sẽ được gọi trực tiếp sau sự kiện này.
5 close
Xảy ra khi Socket đã được đóng.

Thuộc tính của net.Socket trong Node.js

net.Socket có nhiều thuộc tính hữu ích giúp bạn điều khiển tốt hơn trong việc tương tác với Socket.

Stt Thuộc tính & Miêu tả
1 socket.bufferSize
Thuộc tính này chỉ số lượng ký tự đã được đệm
2 socket.remoteAddress
Biểu diễn chuỗi của địa chỉ Remote IP.
3 socket.remoteFamily
Biểu diên chuỗi của Remote IP Family. Đó là 'IPv4' hoặc 'IPv6'.
4 socket.remotePort
Biểu diễn dạng số của Remote Port. Ví dụ 80 hoặc 21.
5 socket.localAddress
Biểu diễn chuỗi của địa chỉ Local IP mà một Remote Client kết nối tới. Ví dụ, nếu 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.localPort
Biểu diễn dạng số của Local Port. Ví dụ 80 hoặc 21.
7 socket.bytesRead
Số lượng byte đã nhận được.
8 socket.bytesWritten
Số lượng byte đã được gửi.

Phương thức của net.Socket trong Node.js

Stt Phương thức & Miêu tả
1 new net.Socket([options])
Xây dựng một đối tượng Socket mới.
2 socket.connect(port[, host][, connectListener])
Mở kết nối cho một Socket đã cho. Nếu bạn cung cấp hai tham số port và host, thì khi đó Socket sẽ được mở dưới dạng như là một TCP Socket. Nếu bạn không cung cấp host, thì giá trị mặc định là localhost. Nếu bạn cung cấp tham số path, thì Socket sẽ đươc mở dưới dạng như một Unix Socket tới đường dẫn path đó.
3 socket.connect(path[, connectListener])
Mở kết nối cho một Socket đã cho. Nếu bạn cung cấp hai tham số port và host, thì khi đó Socket sẽ được mở dưới dạng như là một TCP Socket. Nếu bạn không cung cấp host, thì giá trị mặc định là localhost. Nếu bạn cung cấp tham số path, thì Socket sẽ đươc mở dưới dạng như một Unix Socket tới đường dẫn path đó.
4 socket.setEncoding([encoding])
Thiết lập mã hóa encoding cho Socket dưới dạng như một Readable Stream.
5 socket.write(data[, encoding][, callback])
Gửi dữ liệu trên Socket. Tham số thứ hai 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ỉ cần thiết khi xuất hiện lỗi.
7 socket.pause()
Tạm dừng việc đọc dữ liệu. Do đó sự kiện 'data' không được sinh
8 socket.resume()
Tiếp tục việc đọc dữ liệu sau khi đã tạm dừng với phương thức pause().

Ví dụ

Dưới đây là ví dụ minh họa một số phương thức và thuộc tính của net Module trong Node.js.

Tạo server.js có nội dung:

var net = require('net'); var server = net.createServer(function(connection) { console.log('Ket noi voi Client'); connection.on('end', function() { console.log('Mat ket noi voi Client'); }); connection.write('Hello World!\r\n'); connection.pipe(connection); }); server.listen(8080, function() { 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 client.js như dưới đây

var net = require('net'); var client = net.connect({port: 8080}, function() { console.log('Da ket noi voi Server!'); }); client.on('data', function(data) { console.log(data.toString()); client.end(); }); client.on('end', function() { console.log('Mat ket noi voi Server'); });

Chạy client.js trên một màn hình terminal khác để xem kết quả:

$ node client.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 nghe
Ket noi voi Client
Mat ket noi voi Client

4. DNS Module trong Node.js

dns Module trong Node.js được sử dụng để thực hiện DNS Lookup. Module cung cấp một Network Wrapper không đồng bộ và có thể được import với cú pháp.

var dns = require("dns")

Phương thức của dns Module trong Node.js

Stt Phương thức & Miêu tả
1 dns.lookup(hostname[, options], callback)
Resolve một hostname (ví dụ 'google.com') vào trong bản ghi A (IPv4) hoặc AAAA (IPv6) đầu tiên được tìm thấy. Tham số options có thể là một đối tượng hoặc một số nguyên. Nếu bạn không cung cấp tham số options, thì các địa chỉ IP v4 và v6 đều hợp lệ. Nếu options là một số nguyên, thì nó phải là 4 hoặc 6.
2 dns.lookupService(address, port, callback)
Resolve một address và port đã cho vào trong một hostname
3 dns.resolve(hostname[, rrtype], callback)
Resolve một hostname (ví dụ 'google.com') vào trong một mảng các kiểu bản ghi đã được xác định bởi tham số rrtype.
4 dns.resolve4(hostname, callback)
Giống như dns.resolve(), nhưng chỉ cho các truy vấn IPv4 (một truy vấn A).
5 dns.resolve6(hostname, callback)
Giống như dns.resolve4(), nhưng chỉ cho các truy vấn (một 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 dns.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 một địa chỉ IP thành một mảng bao gồm các hostname

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

Danh sách dưới liệt kê các giá trị rrtypes được sử dụng bởi 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 - Các bản ghi về Mail Exchange

TXT - Các bản ghi về Text

SRV - Các bản ghi về SRV

PTR - Được sử dụng để đảo chiều IP Lookup

NS - Các bản ghi về Name Server

CNAME - Các bản ghi về Canonical Name

SOA - Là viết tắt của Start of Authority Record

Một số Error Code của dns Module trong Node.js

Mỗi truy vẫn DNS có thể trả về một trong các Error Code sau:

dns.NODATA - DNS Server trả về phản hồi mà không bao 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ề một 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 tới DNS Server.

dns.TIMEOUT - Timeout trong khi kết nối tới 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 một số phương thức của dns Module trong Node.js. Bạn tạo main.js có nội dung sau:

var dns = require('dns'); dns.lookup('www.google.com', function onLookup(err, address, family) { console.log('Dia chi:', address); dns.reverse(address, function (err, hostnames) { if (err) { console.log(err.stack); } console.log('Phuong thuc REVERSE cho dia chi: ' + address + ' thanh mang cac hostname: ' + JSON.stringify(hostnames)); }); });

Chạy main.js để xem kết quả::

$ node main.js

Kiểm tra kết quả:

Dia chi: 173.194.46.83
Phuong thuc REVERSE cho dia chi 173.194.46.83 thanh mang cac hostname: ["ord08s11-in-f19.1e100.net"]

5. Domain Module trong Node.js

domain Module trong Node.js được sử dụng để can thiệp các lỗi chưa được xử lý. Các lỗi này có thể được can thiệp bằng cách sử dụng Internal Binding hoặc 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 một Domain.

External Binding - Error Emmitter được thêm vào một Domain bởi sử dụng phương thức add.

Để sử dụng domain Module trong Node.js, bạn cần import theo cú pháp sau.

var domain = require("domain")

Lớp Domain của domain Module được sử dụng để cung cấp tính năng định tuyến các Error và Exception tới một đối tượng Domain. Lớp này là lớp con của lớp EventEmitter. Lớp Domain này xử lý các 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 bởi cú pháp:

var domain = require("domain"); var child = domain.create();

Phương thức của domain Module trong Node.js

Stt Phương thức & Miêu tả
1 domain.run(function)
Chạy hàm function trong ngữ cảnh của domain, bind tất cả các Event Emitter, Timer, và các Request tầm thấp mà đã được tạo trong ngữ cảnh đó. Đây là cách cơ bản nhất để sử dụng một domain.
2 domain.add(emitter)
Thêm Emitter tới domain. Nếu có bất kỳ Event Handler nào được gọi bởi Emitter mà ném một Error, thì nó sẽ được định tuyến tới sự kiện error của domain.
3 domain.remove(emitter)
Trái ngược với phương thức domain.add(emitter). Xóa Emitter nào đó khỏi domain.
4 domain.exit()
Thoát khỏi domain hiện tại

Thuộc tính của domain Module trong Node.js

domain.members: Một mảng các Timer và Event Emitter đã được thêm tới domain.

Ví dụ

Ví dụ sau minh họa một số phương thức của domain Module trong Node.js. Bạn tạo main.js có nội dung sau:

var EventEmitter = require("events").EventEmitter; var domain = require("domain"); var emitter1 = new EventEmitter(); // Tao mot domain boi su dung phuong thuc create() var domain1 = domain.create(); domain1.on('error', function(err){ console.log("domain1 se xu ly loi: ("+err.message+")"); }); // Them mot Emitter toi domain boi phuong thuc add() domain1.add(emitter1); emitter1.on('error',function(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 = domain.create(); domain2.on('error', function(err){ console.log("domain2 se xu ly loi: ("+err.message+")"); }); // Them mot Emitter toi domain boi phuong thuc run() domain2.run(function(){ var emitter2 = new EventEmitter(); emitter2.emit('error',new Error('Duoc xu ly boi domain2')); }); domain1.remove(emitter1); emitter1.emit('error', new Error('Da chuyen doi thanh Exception. He thong bi pha vo!'));

Chạy main.js để xem kết quả::

$ node main.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)

events.js:72
throw er; // Unhandled 'error' event
^
Error: Da chuyen doi thanh Exception. He thong bi pha vo!
at Object. (/web/com/1427722220_30772/main.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

Theo Tutorialspoint

Bài trước: Đối tượng toàn cục trong Node.js

Bài tiếp: Web Module trong Node.js

Thứ Tư, 15/08/2018 11:16
31 👨 76