How can I get Express to output nicely formatted HTML?

前端 未结 9 603
名媛妹妹
名媛妹妹 2020-11-28 01:13

When using Express for Node.js, I noticed that it outputs the HTML code without any newline characters or tabs. Though it may be more efficient to download, it\'s not very r

相关标签:
9条回答
  • 2020-11-28 01:33

    In your main app.js or what is in it's place:

    Express 4.x

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

    Express 3.x

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

    Express 2.x

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

    I put the pretty print in development because you'll want more efficiency with the 'ugly' in production. Make sure to set environment variable NODE_ENV=production when you're deploying in production. This can be done with an sh script you use in the 'script' field of package.json and executed to start.

    Express 3 changed this because:

    The "view options" setting is no longer necessary, app.locals are the local variables merged with res.render()'s, so [app.locals.pretty = true is the same as passing res.render(view, { pretty: true }).

    0 讨论(0)
  • 2020-11-28 01:35

    In express 4.x, add this to your app.js:

    if (app.get('env') === 'development') {
      app.locals.pretty = true;
    }
    
    0 讨论(0)
  • 2020-11-28 01:36

    you can use tidy

    take for example this jade file:

    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
    

    now you can process it with 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);
    });
    

    will give you s.th. like:

    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
    

    then running it through tidy with tidy -m output.html will result in:

    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 讨论(0)
  • 2020-11-28 01:42

    To "pretty-format" html output in Jade/Express:

    app.set('view options', { pretty: true });
    
    0 讨论(0)
  • 2020-11-28 01:42

    If you are using the console to compile, then you can use something like this:

    $ jade views/ --out html --pretty
    
    0 讨论(0)
  • 2020-11-28 01:45

    building off of oliver's suggestion, heres a quick and dirty way to view beautified html

    1) download tidy

    2) add this to your .bashrc

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

    3) run

    $ tidyme localhost:3000/path
    

    the open command only works on macs. hope that helps!

    0 讨论(0)
提交回复
热议问题