Как мне избавиться от 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 - Джейд делает это автоматически.
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, потому что он очень быстрый .
Конечно, имейте в виду, что модель представления Express 3 оставляет кеширование представлений на ваше усмотрение (или на ваш механизм шаблонов). В производственной среде вы, вероятно, захотите кэшировать свои представления в памяти, чтобы не выполнять дисковый ввод-вывод при каждом запросе.
Вы можете использовать EJS с выражением, какие шаблоны являются HTML, но поддерживают переменные. Вот хороший учебник по использованию EJS в экспрессе.
http://robdodson.me/blog/2012/05/31/how-to-use-ejs-in-express/
Чтобы заставить движок рендеринга принимать html вместо jade, вы можете выполнить следующие шаги;
Установите Consolidate и перейдите в свой каталог.
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 в папку «views». Перезагрузите сервер узла и запустите приложение в браузере.
Хотя это будет отображать HTML без каких-либо проблем, я бы порекомендовал вам использовать JADE, изучив его. Jade - потрясающий шаблонизатор, изучение которого поможет вам улучшить дизайн и масштабируемость.
сначала проверьте совместимость версии механизма шаблонов, используя строку ниже
express -h
тогда вам не нужно использовать представление из списка. выберите 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');
тогда вы просто меняете файл в представлениях с jade на html.
Вы также можете напрямую включить свой html-файл в свой нефритовый файл.
include ../../public/index.html
Оригинальный ответ: Экспресс-генератор без нефрита
Если вы хотите использовать простой html в nodeJS, без использования jade .. или чего-то еще:
var html = '<div>'
+ 'hello'
+ '</div>';
Лично меня это устраивает.
Преимущество - простота при управлении. Вы можете использовать некоторые приемы, например '<p>' + (name || '') + '</p>'
, троичные и т. Д.
Если вам нужен код с отступом в браузере, вы можете сделать:
+ 'ok \
my friend \
sldkfjlsdkjf';
и используйте \ t или \ n по желанию. Но я предпочитаю без него, плюс он быстрее.