Koa.js - Templating
Mops to szablonowy silnik. Silniki szablonów służą do usuwania bałaganu w kodzie naszego serwera za pomocą HTML, łącząc ciągi znaków z istniejącymi szablonami HTML. Mops to bardzo potężny silnik szablonów, który ma wiele funkcji, takich jakfilters, includes, inheritance, interpolationitp. Jest wiele powodów do omówienia w tej sprawie.
Aby używać Mopsa z Koa, musimy go zainstalować za pomocą następującego polecenia.
$ npm install --save pug koa-pug 
    Po zainstalowaniu mopsa ustaw go jako silnik szablonów dla swojej aplikacji. Dodaj następujący kod do pliku app.js.
var koa = require('koa');
var router = require('koa-router');
var app = koa();
var Pug = require('koa-pug');
var pug = new Pug({
   viewPath: './views',
   basedir: './views',
   app: app //Equivalent to app.use(pug)
});
var _ = router(); //Instantiate the router
app.use(_.routes()); //Use the routes defined using the router
app.listen(3000); 
    Teraz utwórz nowy katalog o nazwie views. W katalogu utwórz plik o nazwie first_view.pug i wprowadź w nim następujące dane.
doctype html
html
   head
      title = "Hello Pug"
   body
      p.greetings#people Hello Views! 
    Aby uruchomić tę stronę, dodaj następującą trasę do swojej aplikacji.
_.get('/hello', getMessage); // Define routes
function *getMessage(){
   this.render('first_view');
}; 
    Otrzymasz wynik jako -
                To, co robi Pug, to konwertuje ten bardzo prosty wyglądający znacznik do html. Nie musimy śledzić zamykania naszych tagów, nie musimy używać słów kluczowych class i id, a raczej używać '.' i „#”, aby je zdefiniować. Powyższy kod jest najpierw konwertowany do
<!DOCTYPE html>
<html>
   <head>
      <title>Hello Pug</title>
   </head>
    
   <body>
      <p class = "greetings" id = "people">Hello Views!</p>
   </body>
</html> 
    Mops jest w stanie zrobić znacznie więcej niż upraszczanie znaczników HTML. Przyjrzyjmy się niektórym z tych funkcji Mopsa.
Proste tagi
Tagi są zagnieżdżane zgodnie z ich wcięciem. Podobnie jak w powyższym przykładzie,<title> został wcięty w <head>tag, więc był w środku. Jednakże<body> tag był na tym samym wcięciu, więc był rodzeństwem <head> etykietka.
Nie musimy zamykać tagów. Gdy tylko Pug napotka następny tag na tym samym lub zewnętrznym poziomie wcięcia, zamyka tag za nas.
Istnieją trzy metody umieszczania tekstu w tagu:
- Przestrzeń oddzielona -
 
h1 Welcome to Pug 
    - Tekst potokowy -
 
div
   | To insert multiline text, 
   | You can use the pipe operator. 
    - Blok tekstu -
 
div.
   But that gets tedious if you have a lot of text. 
   You can use "." at the end of tag to denote block of text. 
   To put tags inside this block, simply enter tag in a new line and 
   indent it accordingly. 
    Komentarze
Pug używa tej samej składni co JavaScript (//) do tworzenia komentarzy. Te komentarze są konwertowane na komentarze html (<! - comment ->). Na przykład,
//This is a Pug comment 
    Ten komentarz zostanie przekonwertowany na -
<!--This is a Pug comment--> 
    Atrybuty
Aby zdefiniować atrybuty, używamy listy atrybutów oddzielonych przecinkami, w nawiasach. Atrybuty klasy i ID mają specjalne reprezentacje. Poniższy wiersz kodu obejmuje definiowanie atrybutów, klas i identyfikatora dla danego tagu html.
div.container.column.main#division(width = "100",height = "100") 
    Ta linia kodu jest konwertowana na -
<div class = "container column main" id = "division" width = "100" height = "100"></div> 
    Przekazywanie wartości do szablonów
Kiedy renderujemy szablon Pug, możemy faktycznie przekazać mu wartość z naszego programu obsługi trasy, której możemy następnie użyć w naszym szablonie. Utwórz nową procedurę obsługi trasy z następującym kodem.
var koa = require('koa');
var router = require('koa-router');
var app = koa();
var Pug = require('koa-pug');
var pug = new Pug({
   viewPath: './views',
   basedir: './views',
   app: app // equals to pug.use(app) and app.use(pug.middleware)
});
var _ = router(); //Instantiate the router
_.get('//dynamic_view', dynamicMessage); // Define routes
function *dynamicMessage(){
   this.render('dynamic', {
      name: "TutorialsPoint", 
      url:"https://www.tutorialspoint.com"
   });
};
app.use(_.routes()); //Use the routes defined using the router
app.listen(3000); 
    Następnie utwórz nowy plik widoku w katalogu views o nazwie dynamic.pug, używając poniższego kodu.
html
   head
      title = name
   body
      h1 = name
      a(href = url) URL 
    otwarty localhost:3000/dynamicw przeglądarce i po nim powinno być wyjście. -
                Możemy również użyć tych przekazanych zmiennych w tekście. Aby wstawić przekazane zmienne między tekstem tagu, używamy składni # {nazwa_zmiennej}. Na przykład w powyższym przykładzie, jeśli chcemy wstawić Pozdrowienia z TutorialsPoint, musimy użyć poniższego kodu.
html
   head
      title = name
   body
      h1 Greetings from #{name}
      a(href = url) URL 
    Ta metoda używania wartości nosi nazwę interpolacji.
Warunki
Możemy również używać instrukcji warunkowych i konstrukcji pętli. Rozważmy ten praktyczny przykład, jeśli użytkownik jest zalogowany, chcielibyśmy wyświetlić „Cześć, Użytkownik”, a jeśli nie, to chcielibyśmy pokazać mu link „Zaloguj / Zarejestruj się”. Aby to osiągnąć, możemy zdefiniować prosty szablon, taki jak -
html
   head
      title Simple template
   body
      if(user)
         h1 Hi, #{user.name}
      else
         a(href = "/sign_up") Sign Up 
    Kiedy renderujemy to za pomocą naszych tras i przekazujemy obiekt taki jak -
this.render('/dynamic',{user: 
   {name: "Ayush", age: "20"}
}); 
    Zostanie wyświetlony komunikat Hi, Ayush. Jeśli jednak nie przekażemy żadnego obiektu lub przekażemy go bez klucza użytkownika, otrzymamy link Zarejestruj się.
Uwzględnij i składniki
Mops zapewnia bardzo intuicyjny sposób tworzenia komponentów dla strony internetowej. Na przykład, jeśli widzisz witrynę z wiadomościami, nagłówek z logo i kategoriami jest zawsze stały. Zamiast kopiować to do każdego widoku, możemy użyć dołączania. Poniższy przykład pokazuje, jak możemy użyć funkcji include -
Utwórz trzy widoki za pomocą następującego kodu -
header.pug
div.header.
   I'm the header for this website. 
    content.pug
html
   head
      title Simple template
   body
      include ./header.pug
      h3 I'm the main content
      include ./footer.pug 
    footer.pug
div.footer.
   I'm the footer for this website. 
    Utwórz do tego trasę w następujący sposób.
var koa = require('koa');
var router = require('koa-router');
var app = koa();
var Pug = require('koa-pug');
var pug = new Pug({
   viewPath: './views',
   basedir: './views',
   app: app //Equivalent to app.use(pug)
});
var _ = router(); //Instantiate the router
_.get('/components', getComponents);
function *getComponents(){
   this.render('content.pug');
}
app.use(_.routes()); //Use the routes defined using the router
app.listen(3000); 
    Iść do localhost:3000/components, powinieneś otrzymać następujące dane wyjściowe.
                include może być również używany do dołączania zwykłego tekstu, CSS i JavaScript.
Mopsa ma wiele innych funkcji. Jednak są one poza zakresem tego samouczka. Możesz dalej odkrywać Pug w Pug .