Module trong NodeJS - viết một lần thôi

456
05-03-2018
Module trong NodeJS - viết một lần thôi

Mình luôn đặt câu hỏi này đầu tiên. Ứng dụng của cách làm này đó chính là tận dụng, khỏi viết đi viết lại những đoạn code giống nhau, đơn giản vậy thôi. Chắc các bạn đã quen với việc validate form người dùng nhập, ở cả server lẫn client.

Như những bài viết khác của mình, trước khi bắt tay vào mình đã tìm kiếm trên Kipalog và không thấy bài viết nào nói về vấn đề này. Trọng tâm của bài viết này là cách làm sao viết một module chạy được trên cả Client lẫn Server với Nodejs và bài viết này chỉ phù hợp cho những ai mới làm quen Nodejs như mình. 

Ứng dụng thực tế

Giả sử như bạn đã biết cách tạo module trong Nodejs, chúng ta sử dụng hàm Require và Module.exports để import một Module và xuất một Module. Ví dụ một Module kiểm tra giá trị form người dùng nhập vào, đoạn code này nằm trong file bar.js:

//bar.js

var bar = {};

//Others variables and functions

module.exports = bar;

Thật là tuyệt vời nếu như chúng ta có thể đơn giản chèn file bar.js vào trình duyệt như những file js khác, đồng nghĩa với việc bạn muốn sử dụng những đoạn code nằm trong chỗ Others variables and functions ở chỗ xử lý sự kiện nút submit chẳng hạn (dĩ nhiên không phải là copy paste lại). Tuy nhiên, mọi thứ không tươi đẹp như vậy, trình duyệt sẽ không thể hiểu được require là hàm ở đâu ra và module.exports cũng thế và sẽ báo lỗi Undefined, vâng, lỗi kinh điển của Javascript. Dĩ nhiên về phía Server nó hiểu vì nodejs nó hỗ trợ hai cái này. Nếu vậy, cốt lõi ở đây chính là hiện tại trình duyệt chưa hỗ trợ hàm require và module, cũng như module.exports.

Không lẽ anh em dev chúng ta bó tay chỉ vì một lý do như thế? Dĩ nhiên là không, và đây là giải pháp, rất dễ đó chính là xài if else, nếu như là ở trình duyệt thì gắn vào một biến global, ví dụ window, còn nếu là phía server thì require, exports bình thường.

(function() {

var bar = (function() {

//Others variables and functions

})();

if (typeof module !== 'undefined' && typeof module.exports !== 'undefined')

module.exports = bar;

else

window.bar = bar;

})();

Và để sử dụng trên phía Server ta chỉ việc gọi hàm Require bình thường, còn phía trình duyệt bạn có thể đơn giản dùng thẻ Script.

Cá nhân mình thấy đây là một điều khiến Nodejs ghi điểm thêm với mình và cực kỳ hữu ích, bảo sao cộng đồng Javascript ngày càng phát triển. Còn một cách nữa là dùng tới RequireJS, hẹn ở bài viết khác. Hi vọng bài viết có ích cho tất cả mọi người. Cảm ơn tất cả các bạn đã đọc.

>> Tìm hiểu thêm: Prototype trong JavaScript

TAGS: nodejs
SHARE