Contents
Node.js Module là gì?
Module là những đoạn mã được đóng gói lại và được giữ Private. Điều đó có nghĩa là các hàm hay biến trong module mới có thể truy cập và thao tác với nhau. Nếu bạn muốn sử dụng module từ bên ngoài thì cần phải chìa API là các biến/hàm ra bằng cách sử dụng exports hoặc module.exports.
Chính nhờ tính đóng gói như thế này mà đảm bảo tính toàn vẹn của Module. Sẽ chỉ có những hàm, biến được exports thì bên ngoài mới truy cập được.
Các module hoàn toàn tách biệt độc lập nhau, mỗi module sẽ thực hiện nhiệm vụ của riêng nó mà không ảnh hưởng tới module khác. Khi nào cần sử dụng module nào thì gọi chúng ra và kết hợp các module lại với nhau tùy logic xử lý của bạn.
Trong Node.js có hai loại module. Một loại module được tích hợp sẵn trong Node.js và người ta gọi là built-in module.
Còn loại mà do bên thứ 3 phát triển và có thể cài đặt thêm bất cứ lúc nào thì gọi là external module. Với external module, bạn có thể dễ dàng cài đặt thông qua NPM.
Built-in Modules
Như mình đã nói ở trên, built-in modules là những module được tích hợp sẵn trong Node.js. Có thể kể tên một số built-in module như: http, url, crypto, fs, events, path…
Như ở bài viết giới thiệu về Nodejs, mình có thể tạo một server http mà không cần phải cài đặt thêm bất cứ module nào khác.
const http = require('http');
const server = http.createServer((req, res) => {
res.write('<h1> Hi, thank you for visit https://hocweb.vn </h1><hr>');
res.end();
});
server.listen(3000, 'localhost');
Trong ví dụ trên mình require module http, sau đó khởi tạo server bằng phương thức http.createServer(), cuối cùng là lắng nghe server này trên port 3000.
Các module do 3rd party xây dựng (External Modules)
Các built-in module chỉ mang lại cho Nodejs những tính năng cơ bản. Điều mà làm cho Nodejs phổ biến chính là một kho các module do cộng đồng phát triển.
Chúng ta có thể dễ dàng cài đặt một module thông qua NPM, với repository nổi tiếng là npmjs.
Ở bài viết về Jade là gì ? Và cách sử Jade với NodeJS chính là một ví dụ về việc sử dụng module.
const express = require('express')
const app = express()
const port = 3000
app.get('/', (req, res) => res.send('Hello World!'))
app.listen(port, () => console.log(`Example app listening on port ${port}!`))
Câu lệnh cài đặt một module bên ngoài: npm install --save express
Để sử dụng thì cũng tương tự như build-in module thôi: require('express')
Tự xây dựng module
Để tạo một module trong Nodejs cực kì dễ. Nếu không bàn đến logic của business thì cú pháp để tạo và đóng gói một module rất đơn giản, chỉ với vài dòng code.
Để dễ hiểu hơn, mình sẽ minh họa bằng một ví dụ tạo một module: Trả về một số ngẫu nhiên trong khoảng từ 1 đến 10.
Viết Module và tạo ra API
Đầu tiên, bạn tạo một file myRandom.js và chìa ra một API để có thể sử dụng ở bên ngoài module.
function getRandom(min, max) {
return Math.random() * (max - min) + min;
}
exports.between1and10 = function() {
return getRandom(1, 10);
};
Bạn có thể thấy đoạn code trên, mình tạ=o một hàm có tên là between1and10() bằng từ khóa exports. Như vậy, từ bên ngoài module chỉ có thể sử dụng được hàm between1and10 mà thôi.
Sử dụng module
Như mình đã nói ở phần trên, module là một có tính đóng gói. Tức là chỉ những hàm/biến được phép truy xuất từ bên ngoài qua từ khóa exports, còn lại thì bên ngoài không thể truy nhập được.
Để sử dụng module, bạn làm như sau:
var myRandom = require('./myRandom.js');
console.log(myRandom.between1and10());
Nếu bạn cố tình gọi hàm getRandom()
từ bên ngoài như sau:
var myRandom = require('./myRandom.js');
console.log(myRandom.getRandom(5, 99));
Nodejs sẽ báo lỗi ngay: TypeError: myRandom.getRandom is not a function.
Bằng cách ẩn những hàm/biến trong module, và chỉ cho phép những phần được phép sẽ cho phép mã nguồn của bạn được tổ chức tốt hơn.
Kết luận
Qua bài viết này, bạn đã hiểu về module. Bây giờ bạn có thể tự tạo và sử dụng module cho những project, app cá nhân rất hữu ích và tiện lợi.
Hãy tìm hiểu thêm về Module : Cách sử dụng Module FS trong NodeJS

Bài viết này được sưu tầm và tổng hợp từ nhiều nguồn trên Internet.
Nếu có gì không hiểu thì inbox messenger bên dưới mình hỗ trợ thêm nhé.