A node.js view system similar to what you're used to with Express' res.render()
.
Inspired by co-views and
consolidate.js.
- First-class async support.
.render()
always returns a Promise. - Streams are supported.
- Template adapters are integrated, but are retrieved lazily to avoid code bloat.
- Easier plugin system for custom renderers.
$ npm install templation
var Templation = require('templation')
var views = new Templation()
views.use('html', Templation.engines.html)
Create a new view system. Options are:
cache
- whether to cache the templates. Defaults totrue
in production.root
- the root folder to look for templates. Defaults toprocess.cwd()
, so you should set this.
Use a custom view engine.
extension
is a file extension to map this engine to.
engine
is an object with the following methods:
.compile(filename, options)
- it should return (optionally via promise) a "compiled template". The "compiled template" must be an object or function. This gets cached whencache: true
!.render(compiled, options)
-compiled
is whatever is compiled from.compile()
. It should return (optionally via promise) aString
,Buffer
, orStream
Render the template name
, which resolves against root
.
Returns a promise, which then returns a String
, Buffer
, or Stream
.
Enable or disable the caching system. (true
/ false
)
A list of included engines. Generally, the API usage is:
views.use('html', Templation.engines.html)
Included adapters are:
var Templation = require('templation')
var views = new Templation()
views.use('html', Templation.engines.html)
http.createServer(function (req, res) {
views.render('home').then(function (html) {
// assuming html is a string
res.setHeader('Content-Length', Buffer.byteLength(html))
res.setHeader('Content-Type', 'text/html')
res.end(html)
}, function (err) {
res.statusCode = err.status || 500
res.end('Internal Server Error')
})
})