server.js
const express = require('express');//Подключаем модуль const path = require('path');//Модуль для работы с путями к файлам и папкам const csrf = require('csurf');//CSRF - защита (Cross-Site Request Forger) const flash = require('connect-flash');//серверные сообщения const exphbs = require('express-handlebars');//Подключаем шаблонизатор const db = require('mongoose'); //библиотека для mongodb const hbs= exphbs.create({//Настройки шаблонизатора defaultLayout: 'main',//Шаблон по умолчанию, основной, (template/layouts/main.hbs) extname: 'hbs', //Расширение шаблонов, пользовательское. По умолчанию express-handlebars helpers: require('./helpers/hbs-helpers')//подключаем свои операторы }); app.engine('hbs', hbs.engine);//Подключени шаблонизатора к express, регестрируем движок app.set('view engine', 'hbs');//Запускаем шаблонизатор, используем app.set('views', 'template');//Указываем папку с шаблонами app.use(express.static(path.join(__dirname,'public')));//Статические папки для хранения стилей картинок app.use(express.urlencoded({extended: true}));
helpers/hbs-helpers.js
/** * Свои операторы для шаблонов * @type {{ifeq(*, *, *): *}} */ module.exports ={ ifeq(a, b, options){//Оператор сравнения if(a.toString() === b.toString()){ return options.fn(this);//Если значения совподают } return options.inverse(this);//Если значения не совподают } };
template/courses.hbs
{{#if courses.length}} <div class="row"> {{#each courses}} <div class="col s4 flex-itm-course"> <div class="card "> <div class="card-image"> <img width="100px" src="{{img}}"> </div> <div class="card-content"> <span class="card-title">{{title}}</span> <p class="price">{{price}}</p> </div> <div class="card-action"> <div class="row"> <div class="col s4"><a href="/courses/{{id}}" class="btn">view</a></div> {{#ifeq userId._id @root.userId}} <div class="col s4"><a href="/courses/{{id}}/edit?allow=true" class="btn light-blue lighten-3">edit</a></div> {{/ifeq}} <div class="col s4"> {{#if @root.isAuth}} <form action="/card/add" method="post"> <input type="hidden" name="id" value="{{id}}"> <input type="hidden" name="_csrf" value="{{@root.csrf}}"> <input type="submit" class="btn blue darken-1" value="by"/> </form> {{/if}} </div> </div> </div> </div> </div> {{/each}} </div> {{else}} <p>Нет записей</p> {{/if}}