• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Renderowanie DOMELementu zamiast String EJS

+1 głos
177 wizyt
pytanie zadane 15 grudnia 2018 w JavaScript przez ShiroUmizake Nałogowiec (46,300 p.)
edycja 15 grudnia 2018 przez ShiroUmizake

Ostatnio przygotowuje parę pomocnych helpersów do projektów opartych na expressie. Związku z tym próbuje ujarzmić jądro EJS.

To zacznijmy od kodu, setup serwisu:

// server.js
const express             = require('express');
const app                 = express();
const bodyParser          = require('body-parser');
const Provider          = require('./providers/provider');
const EnviromentLoader  = require('./loaders/EnviromentLoader');
const ServicesLoader    = require('./loaders/ServicesLoader');
const SecurityManager   = require('./utils/SecurityManager');

EnviromentLoader.setEnviroment(app);
ServicesLoader.loadServices(app);

app.engine('ejs', require('express-ejs-extend'));
app.use(express.static(__dirname + '/static'));

app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());

Provider.loadProviders(app);

app.use(app.get('SessionProvider').createSession());
app.use('/', SecurityManager(app.get('config')));

require('./routing/Routes')(app);

var port = process.env.PORT || 8100;

app.listen(port);
console.log('Projekt_random_cup is running ' + port);

Provider dostarcza EJSExtension do midleware app.

const SessionProvider = require('./SessionProvider');
const EJSExtension = require('../utils/EJSExtension');

const Provider = {
  loadProviders: function(app) {
    EJSExtension.setConfig(app.get('config'));
    app.set('SessionProvider', SessionProvider);
    app.set('EJSExtension', EJSExtension);
  }
}

module.exports = Provider;

Następnie EJSExtension dostarcza metody pomocnicze:

const EJSExtension = {
  config: '',
  engine: {},
  fs: {},

  setConfig: function(config) {
    this.config = config;
    this.engine= require('ejs');
    this.fs = require('fs');
  },

  assets: function(file) {
    const basePath = this.config.assetsSetings.basic_url;
    const cssUrl = 'css/pages/';
    const url = `${basePath}${cssUrl}${file}.css`;
    var compiled = this.engine.compile(this.fs.readFileSync(__dirname + '/../views/helpers/assets/css.ejs', 'utf8'));
    var html = compiled({ url: url });
    return html;
  }
}
module.exports = EJSExtension;

Które baseControler dostarcza do innych kontrolerów, a te do templateRender (EJS)

<% extend('layouts/template') %>
  <section class="mainPage__topContainer">
  <div class="mainPage__slider">
    <% include components/notice/slider %>
  </div>
    <% if (!session.isLogged) { %>
      <div class="mainPage__form">
      <% include components/forms/login %>
      </div>
    <% } %>
</section>

<%= helpers.assets('main') %>

I tu wszystko działa, ale nie wrzuca mi domElement ale String, według moje spostrzeżenia (patrząc na console,logi jakie miała biblioteka)  w oógle nie leci do templateRender, tylko do innej metody (jeszcze nie rozkminiłem gdzie), pytanie czy jest taka możlwość by zaczęło robić to co ma robić. Wiem, że w twig-u da się takie fajne ficzerki robić.

EDIT: Problem rozwiązany, należało zmienić znak w znaczniku.

<%- helpers.assets('main') %>

A nigdziie w dokumentacji tego nie napisali xd.

Zaloguj lub zarejestruj się, aby odpowiedzieć na to pytanie.

Podobne pytania

0 głosów
1 odpowiedź 479 wizyt
pytanie zadane 27 sierpnia 2020 w JavaScript przez boneoflive Użytkownik (930 p.)
0 głosów
0 odpowiedzi 227 wizyt
pytanie zadane 6 listopada 2022 w JavaScript przez Mefyra Nowicjusz (190 p.)
0 głosów
0 odpowiedzi 764 wizyt

93,771 zapytań

142,731 odpowiedzi

323,383 komentarzy

63,373 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...