01/10/2018, 11:15

Giới thiệu cái Node js express template engine tự chế cực nhỏ

Đầu tiên xin giải thích cái tiêu đề tại sao phải là node js express. Số là sau một hồi loai hoay với cái em node js chân dài này mình cảm thấy rất phấn khởi, nhưng cái em node này mà không có cái thèng express vào thì sinh ra đủ thứ chiện nhức đầu lắm, mặc dù phương châm của mình là phải sử dụng em ấy một cách minimal nhưng do cái rắc rối trên đành phải cho cái thằng express nhảy vào phụ với em node js một tí…

Cấu trúc
1: Dạo một vòng template engine
2. Tại sao hứng thú làm cái quái này.
3. nội dung của em minimal template engine

chỉ ba phương thức thôi:

var Thtpl=function(){
    var that={
        mytpl:function(template,data){
            return template.replace(/{([w.]*)}/g, function(str, key) {
                var keys = key.split("."), v = data[keys.shift()];
                for (i = 0, l = keys.length; i < l; _i++) v = v[this];
                return (typeof v !== "undefined" && v !== null) ? v : "";
              });
        },
        my_render:function(file,res,data){
            var fs=require('fs');
            var text=fs.readFileSync(file,'utf8');
            res.send(this.mytpl(text,data));
        },
        my_render_str:function(file,data){
            var fs=require('fs');
            var text=fs.readFileSync(file,'utf8');
            return this.mytpl(text,data);
        },
    }
    return that;
}
exports.fn=Thtpl();

4.Có cần chế cho em ấy một cái npm hay không (Chắc thôi khỏi …)
5.Sử dụng em ấy thế nào
6. Cấu trúc thư mục

views
-welcome
------home.html
------test1.html
------test2.html
-product
------home.html
------pro1.html
------pro2.html
main.html
app.js
thtpl.js
7.Kết quả ra làm sao

Còn decontruction…các bạn nhớ đón đọc nhé…

Huy Hoàng Phạm viết 13:16 ngày 01/10/2018

Vừa đọc thấy readFileSync là thấy fail rồi
Bản chất của NodeJS là asynchonous, nếu đã đọc file thì nên dùng readFile để ngăn ko bị block thread. Khi có kết quả thì mới trả về cho người dùng. Nâng cao hơn thì còn phải dùng stream, pipe để không phải load toàn bộ file lên RAM, hạn chế lượng RAM sử dụng.
Với code này chỉ cần người dùng nhiều xí, file template nặng nặng tí là die site ngay

Dù gì cũng ủng hộ, làm nhiều optmize nhiều sẽ học được thôi, cố lên bạn nhé

cdxf viết 13:27 ngày 01/10/2018

Kinh nghiệm của mình là:
Đừng tự tạo 1 opinionated framework nếu không có IDE hỗ trợ cho cái framework đó, hầu hết các opinionated framework đều có IDE hỗ trợ hoặc plugin gắn vào hỗ trợ dev, bạn tạo 1 OF mà bạn không đủ sức tạo 1 cái plugin/ide hỗ trợ cái framework bạn tạo ra thì kết quả thường là như vầy:

Hung viết 13:26 ngày 01/10/2018

Về vụ dùng sync hay async tuỳ vào bạn thiết kế app như thế nào? Mình đọc trên ngôn ngữ Erlang họ giải thích async nếu dùng sai cách thì càng chậm hơn cả sync, bên NodeJS thì không có nhắc đến.

Một failback khi dùng Async hay Concurrency là cố biến đoạn sequential code thành async code. Sử dụng async vô tội vạ, và cũng vì phần lớn NodeJS API đều dạng async nên newbie hay dùng các normal function (dạng async) hơn là sync function (có thêm Sync đằng sau tên hàm), dẫn đến callback hell phổ biến.

Đối với đoạn code liên tục, thực thi từng lệnh từ trên xuống dưới, hay sequential code, chỗ nào gọi Node API thì dùng bản sync. Wrap đoạn code lớn đó trong async function cha, trong code chỗ nào có lỗi thì return callback với error liền.

Bài liên quan
0