Comments (16)
Тут немного не верно указаны параметры.
Есть рабочий пример тут https://github.com/baryshev/ect/blob/master/examples/compiler.js
В Вашем случае нужно примерно так:
app.use('/view', ECT.compiler({ root: __dirname + '/view' }))
app.all('/*',function(request,response){
new rootController(request,response);
});
Параметр root это путь к папке где хранятся шаблоны на диске. А первый параметр в .use
это base-url для шаблонов.
Например если root будет /home/myapp/views
а подключён compiler будет через .use('/templates', ECT.compiler(
, то шаблон по URL example.com/templates/tpl.html будет браться по этому пути: /home/myapp/views/tpl.html
Для надёжности параметр root
нужно делать абсолютным, на случай изменения cwd
поэтому в примере указан __dirname
.
from ect.
К сожалению этот пример не работает.
Вот код моего приложения.
require('./Initialization.js');
app=express();
app.use(express.cookieParser());
app.use(express.bodyParser());
app.use('/view', ECT.compiler({ root: __dirname + '/view' }))
app.all('/*',function(request,response){
new rootController(request,response);
});
app.listen(8880,"127.0.0.1");
Все равно запрос /view/template.html
обрабатывается конструкцией app.all('/*',...)
from ect.
Извиняюсь. Я сам немного ошибся.
Есть 2 сущности:
- Объект ECT, который создается точно также, как если бы он использовался для простого рендеринга на сервере.
- Middleware, который создается методом объекта ECT (1 сущности).
var ECT = require('ect'); // Подключаем ECT
var renderer = ECT({ root : __dirname + '/view', ext : '.html', watch: true }); // Создаем объект ect (тут root - это путь к папке с шаблонами на диске)
app.use(renderer.compiler({ root : '/view', gzip: true })); // Подключаем middleware (тут root это base-url)
// app.use('/view', renderer.compiler({ gzip: true })); // Это тоже самое, что и предыдущая строка, только base-url задается средствами express а не middleware.
from ect.
Поменял код. К сожалению, ситуация все та же.
require('./Initialization.js');
app=express();
app.use(express.cookieParser());
app.use(express.bodyParser());
global.ECT= ect({ root: __dirname + '/view', watch: true });
app.use(ECT.compiler({ root : '/view', gzip: true })); // Подключаем middleware (тут root это base-url)
app.all('/*',function(request,response){
new rootController(request,response);
});
app.listen(8880,"127.0.0.1");
Видимо не судьба мне рендерить шаблоны на сервере... неужели Coffee-Script надо будет подключать?
from ect.
Вот только что проверил у себя такой же код:
var express = require('express');
var app = express();
var ect = require('ect');
app = express();
app.use(express.cookieParser());
app.use(express.bodyParser());
global.ECT = ect({ root: __dirname + '/view', watch: true });
app.use(ECT.compiler({ root : '/view', gzip: true })); // Подключаем middleware (тут root это base-url)
app.all('/*',function(request,response){
response.end('Hello, World!');
});
app.listen(3000);
Структура файлов:
view
|_template.html
app.js
URL: http://127.0.0.1:3000/view/template.html
Отдает скомпилированный шаблон.
from ect.
Да, ваш пример работает. Дело было в Nginx.
Было вот так
location ^~ /view {
proxy_pass http://127.0.0.1:8880/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
}
location / {
proxy_pass http://127.0.0.1:8880/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
}
А надо вот так
location ^~ /view {
proxy_pass http://127.0.0.1:8880/view;# Вот здесь надо проксировать именно на view
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
}
location / {
proxy_pass http://127.0.0.1:8880/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
}
Спасибо большое за помощь
from ect.
Не поверите... теперь на клиенте проблемы.
Скомпилированное содержимое modal.window.html
from ect.
Версия ECT на клиенте последняя? У меня всё работает нормально.
from ect.
Вчера скачал ECT вот отсюда https://github.com/baryshev/ect/blob/master/ect.min.js
Подключен только этот один файл. Может чего то не хватает?
from ect.
Похоже у Вас старая версия ECT на сервере. Скомпилированная функция не окружена скобками. Это было недавно исправлено.
from ect.
Да, проблема была именно в этом. А не подскажете, данные с сервера загружаются синхронно?
from ect.
Да, загрузка шаблона происходит синхронно.
from ect.
AJAX.open("GET",file,false)
Увидел уже. А почему сделано так? Если ответа от сервера не будет долго, страница перестанет реагировать на действия пользователя до момента получения данных. Это как-то не религиозно.
from ect.
Можно попросить вас изменить?
Даже готов код предоставить
AJAX.open("GET",file,true)
if(typeof callback=="function"){
AJAX.onreadystatechange = function() {
if (AJAX.readyState == 4 && AJAX.status == 200) {
callback(AJAX.responseText);
}
}
}
from ect.
Там вся система будет сильно усложнена, если применить асинхронную загрузку. Это касается инклудов и наследований внутри шалона. Сейчас можно внутри шаблона написать <% include 'user.html' %>
. Работая синхронно такой шаблон чень легко и быстро можно собрать в готовую строку. С асинхронным вариантом несколько сложнее, т.к. нужно оставлять заглушки для вставок и дожидаться их загрузки и только потом расставлять на места. Также прис инхронном вполнении можно загрузить результат include в переменную внутри шаблона и обработать её. Такой подход работает быстрее из за более простого кода, Количество плюсов в целом превышает количество минусов. Долгая загрузка шаблона с сервера это довольно редкое явление, так как шаблоны, как правило, маленькие. При необходимости - можно загрузить шаблоны во время инициализации приложения и они закешируются в памяти и их повторная загрузка не потребуется, код будет работаь с кешем.
from ect.
Спасибо вам большое, Вадим. Вы мне очень помогли сегодня.
from ect.
Related Issues (20)
- Callbacks inside templates HOT 4
- multiple root folder HOT 2
- no tag or releases on GitHub?
- Template in HEAD pushes content to body
- ectjs with jxcore HOT 1
- Problem on bower install
- Comiler function forgetting compiled version of template HOT 6
- How do I get length of Object? HOT 1
- Additional data to parent using extend
- root folder is ignored HOT 1
- Bigpipe
- Is this active? HOT 3
- webstorm support HOT 1
- Missing TypeScript support
- variable in template
- Referencing issues within JS script
- http://ectjs.com/ offline HOT 2
- Not maintained anymore? HOT 1
- ExpressJS sample code
- Pay for documentation website hosting!
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from ect.