ฉันจะทำให้ Express to output HTML มีรูปแบบที่ดีได้อย่างไร


165

เมื่อใช้ Express for Node.js ฉันสังเกตว่ามันแสดงผลโค้ด HTML โดยไม่มีอักขระหรือแท็บบรรทัดใหม่ แม้ว่าการดาวน์โหลดอาจมีประสิทธิภาพมากกว่า แต่ก็ไม่สามารถอ่านได้มากในระหว่างการพัฒนา

ฉันจะทำให้ Express to output HTML มีรูปแบบที่ดีได้อย่างไร

คำตอบ:


313

ในสถานที่หลัก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 () 's ดังนั้น [app.locals.pretty = true จะเหมือนกับ res.render ที่ผ่านมา (มุมมอง, {สวย : true})


1
โปรดเปลี่ยนคำตอบที่ยอมรับเป็นคำตอบที่ถูกต้องจนถึงปัจจุบัน
Val

นี้ทำงาน แต่ผมต้องติดตั้งพวงของการอ้างอิงพิเศษกล่าวคือpromise, uglify-js, cssและlexical-scopeก่อนที่มันจะทำงานอีกครั้ง (มันจะสร้าง แต่ความผิดพลาดตามคำขอครั้งแรก) ฉันเพิ่มที่หนึ่งบรรทัดเท่านั้น
CWSpear

2
วิธีการทำเช่นนั้นใน Express 4.x
Antonio Salvati

3
@AntonioSalvati ลองapp.locals.pretty = true
Huei Tan

1
นี่คือคำตอบที่ยอดเยี่ยมสิ่งที่ฉันกำลังมองหา การรีเฟรชเพื่อดูว่าจะทำอย่างไรกับ Express เวอร์ชันต่างๆ ฉันค้นหาปัญหาอื่น ๆ และพบคำตอบที่ไม่ได้กล่าวถึง Express รุ่นใดไว้
SnowInferno

50

หากต้องการเอาต์พุต html "แบบสวย" ใน Jade / Express:

app.set('view options', { pretty: true });

3
สุดยอดทางออก! ฉันหวังว่ามันจะตรงกับระดับเยื้องระหว่างเค้าโครง / หน้าด้วย
สตีเฟ่น

34
เก่า. Express 3 ทำงานแตกต่างกันเล็กน้อยดูโพสต์เขียนโดย EhevuTov

7

ใน express 4.x เพิ่มสิ่งนี้ลงใน app.js ของคุณ:

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

ทำงานที่นี่ - ขอบคุณ! ในกรณีของฉันฉันไม่มีชุด 'env' var คุณสามารถเพิ่มลงในไฟล์. js หลักได้ด้วยหนึ่งบรรทัดนี้: process.env.NODE_ENV = 'development';
ยีน Bo

เหตุใดคุณจึงให้คำตอบนี้ถ้าคำตอบอื่นให้โซลูชันนี้อยู่แล้ว
nbro

ฉันเป็นคนแรกที่ตอบคำถามนี้คำตอบอื่น ๆ ได้รับการปรับปรุงหลังจากนั้น
ชีวิตอยู่

6

มีตัวเลือก "สวย" ใน 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 ที่มุมมองของฉันผลิตได้จริง - มันก็ใช้ได้


3
หากการดีบัก HTML คือสิ่งที่คุณทำหลังจากคุณสามารถ 'ตรวจสอบ' HTML ได้ตลอดเวลาโดยใช้ Webkit หรือ Firebug inspector ที่สร้างทรี DOM ของรูปแบบที่สมบูรณ์แบบเสมอ
Roshambo

@Roshambo จริง แต่การนำทางผ่านต้นไม้จะใช้เวลานานเมื่อ u เพียงสามารถสแกนแหล่งที่มาเร็ว (บางครั้ง)
Val

4

หากคุณกำลังใช้คอนโซลเพื่อรวบรวมคุณสามารถใช้สิ่งนี้:

$ jade views/ --out html --pretty

0

คุณต้องการ HTML ที่มีรูปแบบที่ดีจริงๆหรือ แม้ว่าคุณจะพยายามส่งออกบางสิ่งที่ดูดีในตัวแก้ไขหนึ่งมันก็อาจดูแปลก ๆ ได้รับฉันไม่รู้ว่าคุณต้องการ html สำหรับอะไร แต่ฉันลองใช้เครื่องมือพัฒนา chrome หรือ firebug สำหรับ Firefox เครื่องมือเหล่านั้นให้มุมมองที่ดีของ DOM แทนที่จะเป็น html

หากคุณต้องการรูปแบบ HTML จริงๆลองใช้ EJS แทน Jade นั่นหมายความว่าคุณต้องจัดรูปแบบ html ด้วยตัวคุณเอง


ฉันชอบ ejs ดีกว่าตอนนี้ที่ฉันเคยทำงานกับมันมาระยะหนึ่งแล้ว ฉันเดาว่าฉันมีความเฉพาะเจาะจงมากเกี่ยวกับบางสิ่ง
สตีเฟ่น

0

คุณสามารถใช้เป็นระเบียบเรียบร้อย

ยกตัวอย่างไฟล์ Jade นี้:

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

ตอนนี้คุณสามารถประมวลผลด้วยโหนด 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);
});

จะให้ s.th ชอบ:

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="https://stackoverflow.com/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 -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>

0

การสร้างคำแนะนำของ oliver เป็นวิธีที่รวดเร็วและสกปรกในการดู html ที่สวยงาม

1) ดาวน์โหลดเรียบร้อย

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 เท่านั้น หวังว่าจะช่วยได้!


ไม่ทราบเกี่ยวกับตัวเลือกการเยื้อง ... ดี! ฉันใช้เสียงเรียกเข้าที่สร้างขึ้นในรูปแบบ
โอลิเวอร์

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.