UNPKG

1.91 kBJavaScriptView Raw
1var log = require('ee-log'),
2 Class = require('ee-class'),
3 EventEmitter = require('ee-event-emitter');
4
5var extensions = require('./extensions'),
6 renderer = require('./renderer');
7
8var TemplatingMiddleware = new Class({
9
10 inherits: EventEmitter
11 , factory: null
12 , container: null
13 , environments: null
14
15 , init: function initialize(environments){
16 this.environments = environments;
17 this.factory = new renderer.Factory(environments);
18 }
19
20 , request: function (request, response, next) {
21
22 // to set the template to and empty string will trigger a rendering error for text/html, which is fine
23 var template = request.template || '',
24 renderer = this.createRenderer(request);
25
26 response.render = function (status, language, headers, data, callback) {
27 // create a context which should be sufficient for all renderers
28 var context = {content: data, template: template, language:language};
29 // apply the rendering
30 renderer.render(context, function(err, content, type){
31
32 // if the renderer created an error send it back to the client
33 if(err){
34 this.send(500, err.message);
35 return callback(err);
36 }
37
38 // otherwise set the passed headers and content type
39 this.setContentType(type+'; charset=utf8');
40 this.setHeaders(headers || {});
41 this.setHeader('content-language', language);
42
43 // and send it back to the client
44 this.send(status, content);
45 callback();
46 }.bind(this));
47 }.bind(response);
48
49 next();
50 }
51
52 , createRenderer: function(request){
53 return this.factory.create(request);
54 }
55});
56
57module.exports = TemplatingMiddleware;
\No newline at end of file