Як я можу позбутися від Jade під час використання Express з Node.JS? Я хочу просто використовувати звичайний html. В інших статтях я бачив, що люди рекомендували app.register (), який тепер застарілий в останній версії.
Як я можу позбутися від Jade під час використання Express з Node.JS? Я хочу просто використовувати звичайний html. В інших статтях я бачив, що люди рекомендували app.register (), який тепер застарілий в останній версії.
Відповіді:
Ви можете це зробити так:
Встановити ejs:
npm install ejs
Встановіть механізм шаблону в app.js як ejs
// app.js
app.engine('html', require('ejs').renderFile);
app.set('view engine', 'html');
Тепер у файлі маршруту ви можете призначити змінні шаблону
// ./routes/index.js
exports.index = function(req, res){
res.render('index', { title: 'ejs' });};
Тоді ви можете створити свій HTML-перегляд у каталозі / views.
title
в HTML-файлі?
Jade також приймає html-введення.
Просто додайте крапку в кінці рядка, щоб почати надсилати чистий html.
Якщо це для вас хитрість, то спробуйте:
doctype html
html. // THAT DOT
<body>
<div>Hello, yes this is dog</div>
</body>
PS - Не потрібно закривати HTML - це робиться автоматично Jade.
response.sendFile
app.get('/', function (req, res) {
res.sendfile(__dirname + '/index.html');
});)
З офіційного експрес-довідника api :
res.sendfile(path, [options], [fn]])
Перенесіть файл по заданому шляху.
Автоматично за замовчуванням поле заголовка відповіді Content-Type на основі розширення імені файлу. Зворотний виклик
fn(err)
викликається, коли передача завершена або коли виникає помилка.
res.sendFile
забезпечує кеш на стороні клієнта через заголовки кешу http, але він не кешує вміст файлів на стороні сервера. Код, наведений вище, потрапить на диск при кожному запиті .
sendfile
не дозволяє робити будь-які шаблони, оскільки він просто надсилає байти з файлу. Крім того, я б рекомендував не використовувати sendfile
подібне, оскільки це означає, що ви будете вдарятись про диск щоразу, коли надходить запит - величезне вузьке місце. Для сторінок з високим трафіком потрібно дійсно кешувати в пам'яті.
На мою думку, використання чогось такого великого, як ejs, просто для читання html-файлів, є дещо важким. Я тільки що написав свій власний механізм шаблонів для html-файлів, що надзвичайно просто. Файл виглядає приблизно так:
var fs = require('fs');
module.exports = function(path, options, fn){
var cacheLocation = path + ':html';
if(typeof module.exports.cache[cacheLocation] === "string"){
return fn(null, module.exports.cache[cacheLocation]);
}
fs.readFile(path, 'utf8', function(err, data){
if(err) { return fn(err); }
return fn(null, module.exports.cache[cacheLocation] = data);
});
}
module.exports.cache = {};
Я зателефонував до свого htmlEngine, і спосіб, яким ви користуєтесь, просто сказав:
app.engine('html', require('./htmlEngine'));
app.set('view engine', 'html');
app.register()
не амортизований, він був перейменований, app.engine()
оскільки Express 3 змінює спосіб обробки двигунів шаблонів .
Сумісність двигуна шаблону Express 2.x вимагала експорту наступного модуля:
exports.compile = function(templateString, options) { return a Function; };
Двигуни шаблону Express 3.x повинні експортувати такі:
exports.__express = function(filename, options, callback) { callback(err, string); };
Якщо двигун шаблону не піддається цьому методу, вам не пощастить,
app.engine()
метод дозволяє зіставити будь-яку функцію з розширенням. Припустимо, у вас була бібліотека розмітки і хотіли відтворити .md файли, але ця бібліотека не підтримує Express, вашapp.engine()
дзвінок може виглядати приблизно так:var markdown = require('some-markdown-library'); var fs = require('fs'); app.engine('md', function(path, options, fn){ fs.readFile(path, 'utf8', function(err, str){ if (err) return fn(err); str = markdown.parse(str).toString(); fn(null, str); }); });
Якщо ви шукаєте движок шаблонів, який дозволяє використовувати "звичайний" HTML, я рекомендую doT, оскільки це надзвичайно швидко .
Звичайно, майте на увазі, що модель перегляду «Експрес 3» залишає кешування перегляду для вас (або вашого двигуна-шаблону). У виробничому середовищі, ймовірно, ви хочете кешувати свої погляди в пам'яті, щоб ви не робили дисковий введення / вивід на кожен запит.
Ви можете використовувати EJS з експресом, шаблони яких є HTML, але змінні підтримки. Ось хороший підручник щодо використання EJS у експресі.
http://robdodson.me/blog/2012/05/31/how-to-use-ejs-in-express/
Щоб заставити движок візуалізації приймати html замість нефриту, ви можете виконати наступні кроки;
Установка консолідації і ковток в каталог.
npm install consolidate
npm install swig
додайте наступні рядки у файл app.js
var cons = require('consolidate');
// view engine setup
app.engine('html', cons.swig)
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', ‘html');
додайте шаблони перегляду як .html у папку "перегляди". Перезапустіть сервер вузлів і запустіть додаток у браузері.
Хоча це видасть HTML без жодних проблем, я рекомендую вам використовувати JADE, вивчивши його. Нефрит - це дивовижний двигун шаблону, і це допоможе вам досягти кращого дизайну та масштабування.
спочатку перевірте версію сумісності двигуна шаблонів, використовуючи нижній рядок
express -h
тоді вам не потрібно використовувати жодного виду з list.select no view
express --no-view myapp
тепер ви можете використовувати всі html, css, js та зображення у загальній папці.
Ну, це здається, що ви хочете подавати статичні файли. І є сторінка для цього http://expressjs.com/en/starter/static-files.html
Дивно, що ніхто не посилається на документацію.
Враховуючи, що у вас вже визначені маршрути чи ви знаєте, як це зробити.
app.get('*', function(req, res){
res.sendfile('path/to/your/html/file.html');
});
ПРИМІТКА: цей маршрут повинен бути розміщений після всіх інших, оскільки * приймає все.
оскільки Jade підтримує HTML, якщо ви просто хочете мати .html ext, ви можете це зробити
// app.js
app.engine('html', require('jade').renderFile);
app.set('view engine', 'html');
тоді ви просто зміните файл у видах від нефриту до html.
Ви також можете безпосередньо включити свій html-файл у свій нефритовий файл
include ../../public/index.html
Оригінальна відповідь: Експрес-генератор без нефриту
Якщо ви хочете використовувати звичайний html у nodeJS, не використовуючи нефрит .. чи що завгодно:
var html = '<div>'
+ 'hello'
+ '</div>';
Персоналі, я добре в цьому справи.
Перевага - простота при управлінні. Ви можете використовувати деякі хитрощі, як '<p>' + (name || '') + '</p>'
, наприклад , потрійний тощо
Якщо вам потрібен відступний код у браузері, ви можете зробити:
+ 'ok \
my friend \
sldkfjlsdkjf';
і використовуйте \ t або \ n за бажанням. Але я віддаю перевагу без, плюс це швидше.