Как я могу заставить Express выводить красиво отформатированный HTML?

При использовании Express для Node.js я заметил, что он выводит HTML-код без каких-либо символов новой строки или табуляции. Хотя загрузка может быть более эффективной, она не очень удобочитаема во время разработки.

Как я могу заставить Express выводить красиво отформатированный HTML?


person Stephen    schedule 11.03.2011    source источник


Ответы (9)


В вашем основном app.js или что там на его месте:

Экспресс 4.x

if (app.get('env') === 'development') {
  app.locals.pretty = true;
}

Экспресс 3.x

app.configure('development', function(){
  app.use(express.errorHandler());
  app.locals.pretty = true;
});

Экспресс 2.x

app.configure('development', function(){
  app.use(express.errorHandler());
  app.set('view options', { pretty: true });
});

Я поместил красивый шрифт в development, потому что вам нужно больше эффективности с «уродливым» в production. Обязательно задайте переменную среды NODE_ENV=production при развертывании в рабочей среде. Это можно сделать с помощью сценария sh, который вы используете в поле «сценарий» package.json и выполняете для запуска.

Express 3 изменил это, потому что:

Параметр «параметры просмотра» больше не нужен, app.locals — это локальные переменные, объединенные с res.render(), поэтому [app.locals.pretty = true — это то же самое, что и передача res.render(view, { довольно : истинный }).

person EhevuTov    schedule 04.08.2012
comment
Пожалуйста, измените принятый ответ на этот, так как это правильный ответ на сегодняшний день. - person Val; 18.05.2013
comment
Это сработало, но мне пришлось установить кучу дополнительных зависимостей, а именно promise, uglify-js, css и lexical-scope, прежде чем он снова запустится (он собирался, но вылетал при первом запросе). Я добавил только одну строчку. - person CWSpear; 22.10.2013
comment
Как это сделать в Express 4.x? - person Antonio Salvati; 20.05.2014
comment
@AntonioSalvati попробуй app.locals.pretty = true - person Huei Tan; 25.05.2014
comment
Это потрясающий ответ, именно то, что я искал. Приятно видеть, как это делается для разных версий Express. Я искал другие проблемы и нашел ответы, в которых не упоминалось, для какой версии Express это было. - person SnowInferno; 09.10.2014
comment
Это где-нибудь задокументировано? - person gustavohenke; 14.09.2016
comment
@gustavohenke есть ссылка в моем ответе - person EhevuTov; 14.09.2016
comment
Да, я это вижу... но этого нет в документации Express 4. По крайней мере, я пытался погуглить сайт:expressjs.com, но безрезультатно. - person gustavohenke; 14.09.2016
comment
Отличный ответ. Но я не вижу причин только красиво печатать в режиме разработки. HTML очень маленький, особенно для одностраничного приложения, такого как angular. Кроме того, не происходит циклов, как в javascript, если только вы не помещаете JS непосредственно в свой код (чего вам не следует делать, если только это не является абсолютно необходимым для установки глобальной JS-переменной с сервера и т. д.). В любом случае я всегда хочу отформатировать свой HTML, поэтому, если есть какая-то проблема в производстве, это очевидно. Однако Javascript я бы распечатал только для разработки. - person TetraDev; 19.09.2017

Чтобы «красиво отформатировать» вывод html в Jade/Express:

app.set('view options', { pretty: true });
person Jonathan Julian    schedule 29.09.2011
comment
Отличное решение! Хотелось бы, чтобы уровни отступов также совпадали между макетом/страницей. - person Stephen; 04.10.2011
comment
Устаревший. Экспресс 3 работает немного иначе, см. пост, написанный EhevuTov. - person ; 22.08.2012

В самом Jade есть "симпатичный" вариант:

var jade = require("jade");

var jade_string = [
    "!!! 5",
    "html",
    "    body",
    "        #foo  I am a foo div!"
].join("\n");

var fn = jade.compile(jade_string, { pretty: true });
console.log( fn() );

...получает это:

<!DOCTYPE html>
<html>
  <body>
    <div id="foo">I am a foo div!
    </div>
  </body>
</html>

Я не кажусь очень искушенным, но для того, что мне нужно - возможность фактически отлаживать HTML, создаваемый моими представлениями - это просто отлично.

person Kevin Frost    schedule 06.02.2012
comment
Если отладка HTML — это все, что вам нужно, вы всегда можете просто «проверить» HTML с помощью инспектора Webkit или Firebug. Это всегда генерирует идеально отформатированное дерево DOM. - person Roshambo; 08.10.2012
comment
@Roshambo правда, но навигация по дереву занимает много времени, когда вы можете просто сканировать источник быстрее (иногда) - person Val; 18.05.2013

В экспресс 4.x добавьте это в свой app.js:

if (app.get('env') === 'development') {
  app.locals.pretty = true;
}
person alarive    schedule 20.05.2014
comment
Работал здесь - спасибо! В моем случае у меня не было набора 'env' var. Вы можете добавить его в основной файл .js с помощью этой строки: process.env.NODE_ENV = 'development'; - person Gene Bo; 01.06.2015
comment
Почему вы даете этот ответ, если другие ответы уже дают это решение? - person nbro; 18.11.2015
comment
Я был первым, кто дал этот ответ, другой ответ был обновлен позже. - person alarive; 18.11.2015

Если вы используете консоль для компиляции, вы можете использовать что-то вроде этого:

$ jade views/ --out html --pretty
person Tom Sarduy    schedule 26.07.2015

Вам действительно нужен красиво отформатированный html? Даже если вы попытаетесь вывести что-то, что хорошо выглядит в одном редакторе, в другом это может выглядеть странно. Конечно, я не знаю, для чего вам нужен html, но я бы попробовал использовать инструменты разработки Chrome или firebug для Firefox. Эти инструменты дают вам хороший обзор DOM вместо html.

Если вам действительно нужен хорошо отформатированный html, попробуйте использовать EJS вместо jade. Это означало бы, что вам придется форматировать html самостоятельно.

person Oscar Kilhed    schedule 14.03.2011
comment
Мне больше нравится ejs теперь, когда я работал с ним какое-то время. Наверное, я просто очень придирчив к некоторым вещам. - person Stephen; 07.04.2011

вы можете использовать tidy

возьмем, например, этот нефритовый файл:

foo.jade

h1 MyTitle

p
  a(class='button', href='/users/') show users

table
  thead
    tr
      th Name
      th Email
  tbody
    - var items = [{name:'Foo',email:'foo@bar'}, {name:'Bar',email:'bar@bar'}]
    - each item in items
      tr
        td= item.name
        td= item.email

теперь вы можете обработать его с помощью node testjade.js foo.jade > output.html:

testjade.js

var jade = require('jade');
var jadeFile = process.argv[2];
jade.renderFile(__dirname + '/' + jadeFile, options, function(err, html){
    console.log(html);
});

даст вам с.т. как:

output.html

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html><head><title>My Title</title><link rel="stylesheet" href="/stylesheets/style.css"/><script type="text/javascript" src="../js/jquery-1.4.4.min.js"></script></head><body><div id="main"><div ><h1>MyTitle</h1><p><a href="/users/" class="button">show users</a></p><table><thead><tr><th>Name</th><th>Email</th></tr></thead><tbody><tr><td>Foo</td><td>foo@bar</td></tr><tr><td>Bar</td><td>bar@bar</td></tr></tbody></table></div></div></body></html

затем прогон его через tidy с помощью tidy -m output.html приведет к следующему результату:

output.html

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta name="generator" content=
"HTML Tidy for Linux (vers 25 March 2009), see www.w3.org" />
<title>My Title</title>
<link rel="stylesheet" href="/stylesheets/style.css" type=
"text/css" />
<script type="text/javascript" src="../js/jquery-1.4.4.min.js">
</script>
</head>
<body>
<div id="main">
<div>
<h1>MyTitle</h1>
<p><a href="/users/" class="button">show users</a></p>
<table>
<thead>
<tr>
<th>Name</th>
<th>Email</th>
</tr>
</thead>
<tbody>
<tr>
<td>Foo</td>
<td>foo@bar</td>
</tr>
<tr>
<td>Bar</td>
<td>bar@bar</td>
</tr>
</tbody>
</table>
</div>
</div>
</body>
</html>
person oliver    schedule 27.04.2011

Основываясь на предложении Оливера, вот быстрый и грязный способ просмотра украшенного html

1) скачать tidy

2) добавьте это в свой .bashrc

function tidyme() {
curl $1 | tidy -indent -quiet -output tidy.html ; open -a 'google chrome' tidy.html
}

3) бежать

$ tidyme localhost:3000/path

команда open работает только на Mac. надеюсь, это поможет!

person Community    schedule 11.06.2011
comment
не знал о опции отступа... хорошо! Я использовал встроенный форматировщик vim. - person oliver; 16.07.2011

В экспресс 4.x добавьте это в свой app.js:

app.locals.pretty = app.get('env') === 'development';
person petkovic43    schedule 13.10.2017