Ví dụ template Engine Pug Express trong Nodejs

Ví dụ template Engine Pug Express trong Nodejs là vấn đề được nhiều lập trình viên quan tâm, bởi những kiến thức trên trường lớp là không đủ, vì vậy bài Ví dụ template Engine Pug Express trong Nodejs sẽ chia sẻ tới bạn nhiều thông tin hữu ích

Mọi người vẫn hỏi tôi về việc học lập trình nói chung và NodeJS nói riêng có cần năng khiếu hay quá khó để tiếp cận hay không. Thì tôi có thể trả lời rằng, học lập trình cũng như việc bạn học tiếng Anh hay bất kỳ một ngôn ngữ khác, bởi lập trình...là ngôn ngữ của máy tính, để máy tính đọc và máy tính thực hiện theo yêu cầu của mình, bạn thích là học được.

Trong bài viết này chúng ta sẽ tìm hiểu về Template Engine trong Nodejs và cách dùng Template Engine Pug để đưa vào dự án thực tế của mình. Hiện trong NodeJS có rất nhiều template, và mình sẽ liệt kê nó ở phần 1 dưới đây.

Như bạn biết, bất kì một framework nào tạo ra với mục đích xây dựng ứng dụng web đều phải có thư viện template, nhiệm vụ của thư viện này là giúp render dữ liệu thành mã HTML để server trả kết quả về client.

1. Template Engine là gì ?

Nếu như bạn đã quá chán mới việc gõ các thẻ html bằng cách thông thường, khó quản lí các phần với nhau thì Template Engine giúp bạn loại bỏ đi các công đoạn đó. Template Engine tạo ra các khuân mẫu, cho phép bạn sử dụng các tệp mẫu tĩnh trong ứng dụng của mình.

Trong thời gian chạy, Template Engline sẽ thay thế các biến trong tệp mẫu bằng các giá trị thực và chuyển đổi mẫu thành tệp HTML được gửi đến client. Sử dụng cách này sẽ giúp thiết kế trang HTML nhanh và tổ chức các component được nhanh hơn.

Có rất nhiều Template Engine phổ biến được sử dụng rất nhiều như:

  • Mustache
  • Embedded JS Templates
  • Jade templating
  • Pug
  • HandlebarsJS

Trong Express người ta thường sử dụng các Template Engine như: Pug, EJS, Jade,...Trong bài này chúng mình sẽ đi tìm hiểu về một Template Engine khá và được sử dụng trong Express rất nhiều đó là Pug

2. Sử dụng Template Engine Pug trong Express

Pug là một template được sử dụng khá nhiều, chúng ta có thể thấy được Template Engine này cú cú pháp khá là gọn gàng và dễ hiểu giống như ngôn ngữ lập trình Python, ở đây mình có một ví dụ về Pug như sau:

 doctype html  
html(lang='en')  
 head
   title Pug Pug Pug
 body
   h1 Title
   div.container
     p This is content 

Sau khi được biên dịch về HTML thì sẽ có nội dung như sau :

<!DOCTYPE html>  
<html lang="en">  
 <head>
   <title>Pug Pug Pug</title>
 </head>
 <body>
   <h1>Title</h1>
   <div class="container">
     <p>This is content</p>
   </div>
 </body>
</html> 

Bằng việc sử dung Template Engine giúp cho các đoạn mã dễ dàng được triển khai và mở rộng hơn, các cú pháp cũng gọn gàng hơn. Dễ dàng quản lí các phần. Như ví dụ trên sử dụng Pug đương nhiên sẽ nhanh hơn triển khai bằng html thông thường.

Cài đặt Pug

Bạn cần phải cài đặt Pug vào dự án của bạn bằng cách mở terminal và gõ dòng lệnh :

  npm install --save pug 

Để sử dụng Template Engine trong Express bạn cần phải khai báo thêm cho Express một thuộc tính, chúng ta sẽ khai báo 2 thuộc tính sau trong file app.js của dự án :

 //Khai báo đường dẫn đến thư mục chứa các template
app.set('views', './views')
//Khai báo templateEngine sử dụng
app.set('view engine', 'pug') 

Ở đây mình khai báo đường dẫn đến thư mục chứa template là thư mục views và template engine sử dụng là pug. Bạn có thể chỉnh sửa theo từng loại template engine và thư mục chứa template. Lúc này Express sẽ tự động biên dịch các tập tin pug về HTML thông thường. Khi cần sử dụng bạn chỉ cần render và còn có thể truyền dữ liệu từ controller sang view như cách thông thường.

  res.render('index', { title: 'Hey', message: 'Hello there!' }) 

Sử dụng Pug

Ở phần cài đặt Pug mình đã khai báo đường dẫn đến thư mục chứa template là views, lúc này mình sẽ tạo một thư mục có tên là views, trong thư mục này sẽ chứa các file có đuôi là .pug, mặc định phần mở rộng của các file sử dụng pug là .pug nha các bạn. Ví dụ mình sẽ tạo một file có tên index.pug

html  
    head
        title Using Pug 
    body
        header
            h1 This is content of h1
        section
            p This is content of p 
        footer
            This is content of footer 

Trong file app.js của dự án sẽ như sau:

const express = require('express')
const app = express()
//Khai báo đường dẫn đến thư mục chứa các template
app.set('views', './views')
//Khai báo templateEngine sử dụng
app.set('view engine', 'pug')
app.get('/', (req, res) => {
    res.render('index')
})
app.listen(8888) 

Khởi chạy dự án express sẽ tự động render file index.pug trong thư mục views thành file HTML mà trả về cho clients

Khởi tạo class và ID vào các thẻ

Chúng ta có thể tạo các thẻ với các id và class bằng cách thêm dấu chấm (.) cho class và dấu thăng (#) cho id:

PUG

 h1.welcome
p#content
span.note#note_1 


HTML

 <h1 class="welcome"></h1>
<p class="content"></p>
<span class="note" id="note_1"></span> 


Thêm thuộc tính vào các thẻ

Các thuộc tính thẻ tương tự như HTML (các thuộc tính cách nhau bằng dấu phẩy), nhưng giá trị của chúng chỉ là JavaScript thông thường.

PUG

  a(href='Hoidapcode.com') Hoidapcode  |  |  a(class='button' href='Hoidapcode.com') Hoidapcode  |  |  a(class='button', href='Hoidapcode.com', class="btn") Hoidapcode 

HTML

  <a href="Hoidapcode.com">Hoidapcode</a>  <a class="button" href="Hoidapcode.com">Hoidapcode</a>  <a class="button" href="Hoidapcode.com" class="btn">Hoidapcode</a> 

Thuộc tính Style

Thuộc tính style có thể là một chuỗi, giống như bất kỳ thuộc tính bình thường nào; nhưng nó cũng có thể là một object

PUG

 //Giá trị của thuộc tính style là một object
a(style={color: 'red', background: 'green'})

//Giá trị của thuộc tính style là một chuỗi
a(style="color: red; background: "green") 

HTML

  <a style="color:red;background:green;"></a>  <a style="color:red;background:green;"></a> 

Biến trong Pug

Pug cho phép bạn khai báo và sử dụng các biến, để khai báo các biến bạn thêm kí tự ngạch ngang ( - ) và khởi tao các biến như trong javascript. Để lấy giá trị của biến ta thêm dấu bằng ( = ) trước.

PUG

  - var Hoidapcode = 'Learn Nodejs'  h1=Hoidapcode 

HTML

  <h1>Learn Nodejs</h1> 

Biểu thức điều kiện và switch case

Chúng ta có thể sử dụng các biểu thức điều kiện if else trong PUG. Trong file .pug ta có nội dung như sau :

- var isLogin = true
if isLogin 
    h1(style={color: 'green'}) Welcome to hoidapcode
else
    h1(style={color: 'red'}) Login please !!! 

HTML

  <h1 style="color:red;">Login please</h1> 

Ngài ra Pug còn hỗ trợ chúng ta làm việc với swith case

- var girlFriends = 3
case girlFriends
  when 0
    p you have no girlfriends
  when 1
    p you have a girlfriends
  default
    p Ohh !!! you have #{friends} girlfriends 

HTML

  <p>Ohh !!! you have 3 girlfriends</p> 

Comment trong Pug

Pug cung cấp cho chúng ta cú pháp để comment code. Để hiện thị comment trên code html đã render tra sử dụng 2 dấu gạch chéo ( // )

  // Hoidapcode.com - pug  
 p foo  p bar   <!-- Hoidapcode.com - pug-->  <p>foo</p>  <p>bar</p> 

Nếu bạn chỉ muốn comment trong file pug mà ko muốn pug render ra html sử dụng dấu gạch chéo và dấu gạch ngang kết hợp với nhau ( //- )

  //- Hoidapcode.com - pug   
p foo  p bar   <p>foo</p>  <p>bar</p> 

Template Inheritance

Pug hỗ trợ việc mở rộng các đoạn mã bằng cách thừa kế, Template Inheritance hoạt động dựa vào 2 từ khóa block và extends, chức năng này cho phép bạn mở rộng các phần của dự án. Đơn giản phư phân chia bố cục layout. Sau đây mình sẽ dùng Template Inheritance để tạo một bố cục đơn giản. Chúng ta có thể dùng từ khóa append để thêm giá trị vào block.

File layout.pug chứa các block của chứa các phần để chia bố cục

 html
  head
    title Fretuts.net
  body
    block header
    block body
    block footer
      #footer
        p some footer content 

File index.pug để thay thế, ghi đè, thêm giá trị các block trong layout.pug

//- page-a.pug
extends layout.pug
block header 
    h1 Header
block body
    h1 body 
block append footer 
    p Them gia tri vao block footer    

Lúc này khi file index.pug được render ra HTML như sau:

<html>
<head>
    <title>Fretuts.net</title>
</head>
<body>
    <h1>Header</h1>
    <h1>body </h1>
    <h1 id="footer">Footer</h1>
    <p>Them gia tri vao block footer </p>
</body>
</html> 

Mixins

Mixins cho phép bạn tạo các khối Pug có thể tái sử dụng, đây là một tính năng khá hay giúp bạn có thể dùng lại các đoạn mã giống nhau nhiều lần. Nó giống như function trong ngôn ngữ lập trình, bạn có thể thêm các tham số vào nó bằng cách để các tham số trong dấu ngoặc tròn (

 mixin list(first, second, third)
  ul
    li=first
    li=second
    li=third
+list('hoi', 'dap', 'code')
+list('lap trinh', 'nodejs', '.tai hoidapcode') 

HTML

<ul>
  <li>hoi</li>
  <li>dap</li>
  <li>code</li>
</ul>
<ul>
  <li>lap trinh</li>
  <li>nodejs</li>
  <li>tai hoidapcode.com</li>
</ul>

Trên đây là những kiến thức cơ bản về Template Engine Pug và cách sử dụng nó trong ExpressJS. Mong bài viết này có thể giúp ích cho bạn cho việc lập trình với NodeJS, cảm ơn bạn đã quan tâm bài viết này.

Hy vọng với bài viết về Ví dụ template Engine Pug Express trong Nodejs đã giải đáp giúp bạn phần nào về kiến thức lập trình NodeJS. Như tôi đã nói, ngôn ngữ lập trình không quan trọng bằng tư duy giải thuật, tư duy logic để giải quyết vấn đề.

Với những năm trước đây, lập trình viên là một cái nghề khó và kén chọn người học, đồng nghĩa với việc thu nhập hàng tháng của các lập trình viên luôn cao. Còn những năm gần đây, thì lập trình là môn học phổ thông, và ai cũng nên học một ngôn ngữ lập trình nào đó.

Nếu bạn còn bất kỳ câu hỏi nào trong việc học lập trình online, hãy gửi yêu cầu cho tôi qua email hoidapcode.com@gmail.com hoặc để lại comment bên dưới, tôi sẽ giải đáp trong vòng 24 giờ!

Blog hoidapcode.com là blog được tổng hợp tự động các bài học, thông tin về lập trình trên mạng internet. Nếu bạn có ý kiến hoặc đóng góp về bài viết này, hãy liên hệ với tôi!