|
1 | 1 | /** |
2 | | - * 渲染模板 |
| 2 | + * 视图 |
3 | 3 | */ |
4 | 4 | class view { |
5 | | - constructor(context){ |
6 | | - this.context = context; |
7 | | - context.render = this.render.bind(this); |
8 | | - context.renderClient = this.renderClient.bind(this); |
| 5 | + constructor(app){ |
| 6 | + this.app = app; |
| 7 | + app.view = this; |
9 | 8 | } |
10 | 9 |
|
11 | | - render(){ |
| 10 | + render(ctx, options){ |
12 | 11 | return new Promise((resolve, reject) => { |
13 | | - this.renderToString().then(html => resolve(this.context.body = html)); |
| 12 | + this.renderToString(ctx, options).then(html => resolve(ctx.body = html)).catch(reject); |
| 13 | + }).catch(e => { |
| 14 | + let handlerError = this.app.handlerError || function(){}; |
| 15 | + handlerError.call(ctx, ctx, e) |
14 | 16 | }) |
15 | 17 | } |
16 | 18 |
|
17 | | - renderToString(options){ |
18 | | - let { app, url, request : { header : { cookie } } } = this.context, |
| 19 | + renderToString(ctx, options){ |
| 20 | + let { url, request : { header : { cookie } } } = ctx, |
19 | 21 | opt = Object.assign({ url, cookie }, options); |
20 | 22 | return new Promise((resolve, reject) => { |
21 | | - app.engine.renderer.renderToString(opt, (err, html) => { |
22 | | - err ? reject(err) : resolve(html); |
23 | | - }); |
24 | | - }).catch(e => console.log(e)) |
| 23 | + this.app.engine.renderer.renderToString(opt, (err, html) => { |
| 24 | + err ? reject(err) : resolve(html) |
| 25 | + }); |
| 26 | + }) |
25 | 27 | } |
26 | 28 |
|
27 | 29 | renderClient(){ |
28 | 30 |
|
29 | 31 | } |
30 | 32 | } |
31 | 33 |
|
32 | | -module.exports = async (context, next) => { |
33 | | - new view(context); |
34 | | - await next(); |
35 | | -} |
| 34 | +module.exports = app => new view(app) |
0 commit comments