简体   繁体   中英

How do I load a view into a variable?

I need to use websockets to send a view so it can be loaded within a tab. But I can't seem to figure out how to load view into a variable for sending. Seems like the only way to load a view is to call the response.render() function.

Any ideas?

Most templating engines can render a template to an in-memory string, which you can then send over your web socket as raw data. Here's the example from jade .

var jade = require('jade');

// Render a string
jade.render('string of jade', { options: 'here' });

// Render a file
jade.renderFile('path/to/some.jade', { options: 'here' }, function(err, html){
    // options are optional,
    // the callback can be the second arg
});

If you mention specifically which templating engine you are using, we can give specific examples if needed.

Here's how to do it with EJS :

html = new EJS({url: '/template.ejs'}).render(data)

While Peter's solution would work for Jade, I am using EJS. And EJS does not have a renderFile function. So here's a generic way to read the a plain HTML file:

s.readFile(__dirname + '/views/tabs/' + data.tab + '/index.ejs', 'utf8', function( err, html )
{
    socket.emit( 'setTabHTML', { tab: data.tab, 'html': html });
});

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM