Bài viết này chúng ta sẽ cùng nhau tìm hiểu về modue trong Node.js. Từ khái niệm Node.js module là gì, tầm quan trọng và cách tự xây dựng một module cho riêng mình.
Khi bạn viết ứng dụng web sử dụng Node.js, bạn hoàn toàn có thể bỏ tất cả code vào một file index.js mà không gặp lỗi lầm gì cả.
Kể cả ứng dụng của bạn lớn và phức tạp tới đâu thì bỏ tất cả code vào một file cũng không ảnh hưởng tới tốc độ của ứng dụng.
Tuy nhiên, về mặt tổ chức code, hay nói cách khác là tính clean code thì thật là thảm họa. Mã nguồn ứng dụng của bạn sẽ như một bãi rác, khó debug và tính maintain cực kém.
Bạn thử tưởng tượng, nếu bạn là người phải maintain một dự án mà người tiền nhiệm viết code kiểu như vậy. Chắc là mình chỉ muốn “giết người” thôi 😀
Vì vậy, phàm là con người thì chúng ta cần phải viết code có tâm. Code cần phải clean, mã nguồn dễ đọc dễ hiểu. Và lúc này khái niệm Module ra đời và thể hiện vai trò quan trọng của nó.
Nội dung chính của bài viết
#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.
Để đi tìm câu trả lời Node.js module là gì? Chúng ta sẽ lần lượt tìm hiểu từng loại module nhé!
1. 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.
/** * Son Duong * https://vntalking.com * June 04, 2019 */ // app.js const http = require('http'); const server = http.createServer((req, res) => { res.write('<h1> Hi, thank you for visit https://vntalking.com </h1><hr>'); res.end(); }); server.listen(3000, 'localhost'); //end
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.
2. 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ề xây dựng website bằng Express.Js chính là một ví dụ về việc sử dụng module bên ngoài.
/**
* Son Duong
* https://vntalking.com
* June 04, 2019
*/
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')
3. 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.
Bước 1: Viết Module và chìa 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.
/** * Son Dương * https://vntalking.com * June 04, 2019 */ // myRandom.js 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 sẽ “thò” 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.
Đọc ngay:
Bước 2: 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.
4. Tạm kết
Qua bài viết này, bạn đã hiểu về Node.js module là gì rồi đúng không? Nếu bạn đã đọc bài viết về clean code trong Nodejs, bạn sẽ hiểu về tầm quan trọng của module trong việc giúp mã nguồn sáng sủa hơn.
Bài viết tiếp theo mình sẽ hướng dẫn các bạn tự xây dựng một server bằng Nodejs, cũng rất đơn giản thôi. Các bạn chờ nhé!
tks bạn nhiều nha