abstract-action.js
1.66 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
/**
* AbstractAction
*
* @author: Aiden Xu<aiden.xu@yoho.cn>
* @date: 2016/7/11
*/
'use strict';
const _ = require('lodash');
const Promise = require('bluebird');
class AbstractAction {
constructor(req, res, next) {
if (!req || !res) {
throw new Error('Request and response object must be specified.');
}
this.request = req;
this.response = res;
this.next = next;
this.renderContext = {};
}
echoJson(json) {
this.response.set('Content-Type', 'application/json; charset=utf-8;');
this.response.json(json);
}
/**
* 判断是否是AJAX请求
*
* @return boolean 如果是AJAX请求返回 true
*/
isAjax() {
return this.request.header('X-Requested-With') === 'XMLHttpRequest';
}
/**
* 设置入口
*
* @param module 模块名称
* @param entry 入口名称
*/
setEntry(module, entry) {
_.merge(this.renderContext, {
module: module,
page: entry
});
}
/**
* 渲染视图
*
* @param template 模版名称
* @param context 上下文
*/
renderTemplate(template, context) {
this.response.render(template, _.merge({}, this.renderContext, context));
}
/**
* 内部渲染方法,该方法应该由 ActionCreator 来调用
*
* @returns Promise
*/
_render() {
return this.render();
}
/**
* 渲染回调方法
*
* @returns {Promise}
*/
render() {
return new Promise(function(resolve) {
return resolve();
});
}
}
module.exports = AbstractAction;