Module trong Node.js

Module trong Node.js

Node.js sử dụng kiến trúc Module để đơn giản hóa việc tạo ra các ứng dụng phức tạp. Module là giống như các thư viện trong C, C#, Java… Mỗi module chứa một tập các hàm chức năng có liên quan đến một “đối tượng” của Module. Ví dụ, http là Module chứa các hàm cụ thể liên quan đến thiết lập HTTP. Node.js cung cấp một vài các Module core kèm theo để hỗ trợ chúng ta truy cập file trên hệ thống, tạo các máy chủ HTTP, TCP/UDP, và các hàm tiện ích nhỏ hữu dụng khác.

Trước khi sử dụng Module, bạn đơn giản chỉ cần khai báo với hàm require(), như sau:

var http = require("http");

Node.js chỉ là môi trường, bạn phải tự làm mọi thứ!

require() là hàm trả về tham chiếu tới một Module cụ thể. Trong trường hợp của đoạn mã trên, chúng ta đang khai báo một tham chiếu tới http Module và lưu nó vào biến http.

Trong đoạn mã trên, chúng truyền một tham số là tên của Module. Điều này báo cho Node sẽ tìm một Module tên là http trong thư mục node_modules của ứng dụng. Nếu nó không thấy, Node sẽ tiếp tục tìm Module đó ở thư mục global cài đặt node.

Lệnh kiểm tra thư mục global cài đặt node_modules, bạn mở giao diện dòng lệnh CMD và gõ lệnh sau:

npm root -g

Quay trở lại vấn đề, bạn có thể chỉ rõ file bằng việc truyền vào tham số là đường dẫn tương đối ./path/to/my/module.js hoặc tuyệt đối /path/to/my/module.js

var myModule = require('./myModule.js')

Tóm lại, Module là các đoạn mã được đóng gói lại với nhau. Mã trong một Module thường là private – nghĩa là các hàm, biến được định nghĩa và truy cập bởi bên trong của Module. Nhưng, bạn có thể chìa ra các api là các hàm và/hoặc biến để sử dụng bên ngoài Module. Bằng cách sử dụng 1 đối tượng exports, xem ví dụ sau đây:

var PI = Math.PI;
  
exports.dientich = function (r) {
  return PI * r * r;
};
  
exports.chuvi = function (r) {
  return 2 * PI * r;
};

Đoạn mã trên tạo ra một biến PI và nó chỉ có thể truy cập trong Module ta đang định nghĩa. Bằng việc sử dụng exports để chìa ra 2 hàm sử dụng bên ngoài Module là dientich() và chuvi(). Như vậy, giả sử ta đang viết mã trên file ./myModule.js thì biến khai báo tham chiếu myModule có thể gọi hàm dientich() và chuvi().

Global Scope trong Node.js

Node.js là môi trường cho phép lập trình sử dụng JavaScript ở phía server và chạy trên Google’s V8 JavaScript engine. Như vậy, chúng ta nên thực hiện các đoạn mã như khi sử dụng lập trình ở phía Client. Ví dụ, chúng ta nên hạn chế sử dụng biến global. Tuy nhiên, nếu muốn sử dụng, bạn có thể dễ dàng tạo một biến global bằng việc định nghĩa tên biến không có từ khóa var, như sau:

globalVariable = 1;
globalFunction = function () { ... };

Một lần nữa, biến global nên được hạn chế đến mức tối đa. Vì thế, hãy cần thận và nhớ sử dụng từ khóa var để khai báo biến.