DANH MỤC: Node.js CƠ BẢN

Bài 17: Module hóa trong Node.js


Trong các bài trước mình đã giới thiệu và hướng dẫn mọi người sử dụng các module trong Node.js rồi. Nhưng làm sao nó lại làm được như vậy? Các bạn có thắc mắc như thế không? Bài hôm nay mình sẽ hướng dẫn mọi người về cách mà chúng ta có thể chia nhỏ dự án ra thành các module.

1, Module hóa là gì?

Module hóa hay nói cách khác là lập trình hướng module (cấu phần). Là một phương pháp lập trình mà khi đó chúng ta sẽ chia nhỏ dự án ra thành các module với mỗi module là một chức năng riêng,... Về phần lý thuyết bài này mình sẽ không nói nhiều mà chỉ tập trung ứng dụng nó vào Node.js thôi (mình sẽ viết phần lý thuyết này vào một bài khác).

Cũng giống như các ngôn ngữ lập trình khác thì Node.js cũng hỗ trợ chúng ta chia dự án ra thành các module nhỏ để dễ cho việc bảo trì, nâng cấp,... Và trong Node.js thì việc modules hóa được thực thi qua cú pháp của ES6 (ECMA Script). 

2, Module hóa trong Node.js.

Ở trong Node.js chúng ta có thể exports một file ra thành module bằng cách sử dụng cú pháp sau:

module.exports = something;
//hoặc
exports = somthing;

 Trong đó something là những gì mà bạn cần export ra thành module.

Lưu ý: Tất cả các file ở trong các ví dụ bên dưới đều là cùng cấp nhé!

VD: export chuỗi đơn giản.

student.js

//export chuối.
module.exports = 'Vũ Thanh Tài';

main.js

//call module student;
let student = require('./student.js');

console.log(student);
//kết quả: Vũ Thanh Tài

VD: Export function với module.exports.

student.js

//export function.
module.exports = () => {
    return {
        name: 'Vũ Thanh Tài',
        age : 22,
        male: true
    };
};

main.js

//call module student;
let student = require('./student.js');

console.log(student());
//kết quả: { name: 'Vu Thanh Tài', age: 22, male: true }

Hoặc bạn cũng có thể vừa require vửa khởi tạo luôn function mà module export ra.

//call module student;
let student = require('./student.js')();

console.log(student);
//kết quả: { name: 'Vu Thanh Tài', age: 22, male: true }

VD: Cũng là ví dụ trên nhưng mình sẽ sử dụng exports.

student.js

//export function.
exports.getFull = () => {
    return {
        name: 'Vũ Thanh Tài',
        age : 22,
        male: true
    };
};

main.js

//call module student;
let student = require('./student.js');

console.log(student.getFull());
//kết quả: { name: 'Vu Thanh Tài', age: 22, male: true }

Đối với exports luôn luôn sẽ trả về một đối tượng, nên bạn sẽ không thể nào trả về một hàm ẩn danh (closure function) mặc định được mà thay vào đó bạn cần phải gán hàm ẩn danh đó cho một thuộc tính trong đối tượng được exports.

VD: export object.

student.js

//export function.
module.exports = {
    name: 'Vũ Thanh Tài',
    age: 22,
    male: true
}

main.js

//call module student;
let student = require('./student.js');

console.log(student);
//kết quả: { name: 'Vu Thanh Tài', age: 22, male: true }

VD: export class (Ở đây mình sẽ sử dụng luôn kiểu khai báo class trong ES6).

student.js

"use strict"

module.exports = class Student {
    setName(name) {
        this.name = name;
    }
    setAge(age) {
        this.age = age
    }
    getName() {
        return this.name;
    }
    getAge() {
        return this.age;
    }
}

main.js

"use strict"

let student = require('./student.js');

let st = new student();
// set name
st.setName('Vũ Thanh Tài');
//set age
st.setAge(22);
console.log(st.getName());
// Vũ Thanh Tài

console.log(st.getAge());
//22

VD: Cũng với ví dụ trên nhưng mình sẽ thêm constructor cho class students.

student.js

"use strict"

module.exports = class Student {
    constructor(name, age) {
        this.name = name;
        this.age = age;
    }
    setName(name) {
        this.name = name;
    }
    setAge(age) {
        this.age = age
    }
    getName() {
        return this.name;
    }
    getAge() {
        return this.age;
    }
}

main.js

"use strict"

let student = require('./student.js');

let st = new student('Vũ Thanh Tài', 22);

console.log(st.getName());
// Vũ Thanh Tài

console.log(st.getAge());
//22

3, Lời Kết.

Ở bài này mình chỉ tập trung vào các ví dụ cho các bạn theo dõi, còn phần lý thuyết thì thực sự mình cũng không biết nói gì :D.

Nguồn: Toidicode.com

Thông tin tác giả

Vũ Thanh Tài

Vũ Thanh Tài

Biển học vô biên, quay đầu là dại!

Hãy tham gia group facebook để cùng giao lưu chia sẻ kiến thức! Tham Gia