提交 69600aa6e0d9cd79e7efef188a2e76ecdad4cdc9

作者 weiyy
1 个父辈 11655641

yun - tijiao

... ... @@ -14,8 +14,6 @@ module.exports = app => {
14 14
15 15 app.on('response', ctx => {
16 16 const used = Date.now() - ctx.starttime
17   - console.log(used, 'used')
  17 + console.log(ctx, 'used')
18 18 })
19   -
20   -
21 19 }
\ No newline at end of file
... ...
... ... @@ -2,11 +2,16 @@
2 2
3 3 const Controller = require('egg').Controller;
4 4
5   -class HomeController extends Controller {
6   - async index() {
7   - const { ctx } = this;
8   - ctx.body = 'hi, egg';
9   - }
10   -}
  5 +// class HomeController extends Controller {
  6 +// async index() {
  7 +// const { ctx } = this;
  8 +// ctx.body = 'hi,egg';
  9 +// }
  10 +// }
  11 +
  12 +exports.index = async () => {
  13 + const { ctx } = this;
  14 + ctx.body = 'hi,egg';
  15 +};
11 16
12 17 module.exports = HomeController;
... ...
... ... @@ -4,23 +4,69 @@ const Controller = require('egg').Controller;
4 4 class ProxyController extends Controller {
5 5 async info() {
6 6 const { ctx } = this;
  7 + const { params } = ctx;
  8 +
7 9 ctx.body = {
8   - name: `hello ${ctx.params.id}`,
  10 + name: `hello ${params.id}`,
9 11 };
10 12 }
11 13
  14 + addToken(options) {
  15 + const { ctx } = this;
  16 + const { session, headers, ip } = ctx;
  17 +
  18 + if (session.passport && session.passport.user && session.passport.user && session.passport.user.token) {
  19 + options.headers['Authorization'] = "Bearer " + session.passport.user.token;
  20 + }
  21 +
  22 + if (headers['device-id']) {
  23 + options.headers['Device-Id'] = headers['device-id'];
  24 + }
  25 +
  26 + if (ip) {
  27 + options.headers['Client-Ip'] = ip;
  28 + }
  29 +
  30 + return options;
  31 + }
12 32
13   - getOptions() {
14   - const { ctx, config } = this;
15   - const { url, type } = ctx;
  33 + splitUrl(fullUrl) {
  34 + const { config } = this;
  35 + const { prefix } = config;
16 36
17   - let catalog = url.substring(1, url.indexOf('/', 1));
18   - let pathUrl = url.substring(url.indexOf('/', 1));
19   - let fullPath = '/' + catalog + config.restful.version + pathUrl;
  37 + if (prefix && prefix.length > 1) {
  38 + fullUrl = fullUrl.substring(prefix.length - 1);
  39 + }
  40 +
  41 + return fullUrl.substring(4);
  42 + }
  43 +
  44 + addParams(options) {
  45 + const { ctx } = this;
  46 + const postData = !ctx.body ? '' : JSON.stringify(ctx.body || {});
  47 +
  48 + options.params = postData;
  49 + }
  50 +
  51 + addContentLength(options) {
  52 + const { params, headers } = options;
  53 +
  54 + if (params) {
  55 + headers['Content-Length'] = params.length;
  56 + }
  57 + }
  58 +
  59 + getOptions(url, type) {
  60 + const { config } = this;
  61 + const { restful = {} } = config;
  62 + const { version, host, port } = restful;
  63 + const catalog = url.substring(1, url.indexOf('/', 1));
  64 + const pathUrl = url.substring(url.indexOf('/', 1));
  65 + const fullPath = '/' + catalog + version + pathUrl;
20 66
21 67 return {
22   - 'host': config.restful.host, //后台请求地址
23   - 'port': config.restful.port,
  68 + 'host': host, //后台请求地址
  69 + 'port': port,
24 70 'path': fullPath,
25 71 'method': type,
26 72 'agent': false,
... ... @@ -32,69 +78,218 @@ class ProxyController extends Controller {
32 78 };
33 79 }
34 80
35   - addToken(options) {
36   - const { ctx } = this;
  81 + async get() {
  82 + const { ctx, config, logger } = this;
  83 + const { originalUrl, session, curl } = ctx;
  84 + const { restful = {} } = config;
  85 + const { host } = restful;
  86 + const { access_token } = session.user_info;
  87 + const url = splitUrl(originalUrl);
  88 + const options = getOptions(url, 'GET');
37 89
38   - if (ctx.session.passport && ctx.session.passport.user && ctx.session.passport.user && ctx.session.passport.user.token) {
39   - options.headers['Authorization'] = "Bearer " + ctx.session.passport.user.token;
40   - }
  90 + addToken(options);
41 91
42   - if (ctx.headers['device-id']) {
43   - options.headers['Device-Id'] = ctx.headers['device-id'];
44   - }
  92 + const result = await curl(
  93 + `${host}${url}`,
  94 + {
  95 + method: 'GET',
  96 + dataType: 'json',
  97 + headers: {
  98 + 'authorization': `Bearer ${access_token}`,
  99 + 'accept': 'application/json',
  100 + 'content-type': 'application/json'
  101 + },
  102 + timeout: [5000, 60000]
  103 + }
  104 + );
45 105
46   - if (ctx.ip) {
47   - options.headers['Client-Ip'] = ctx.ip;
48   - }
  106 + logger.info(
  107 + "get originalUrl:",
  108 + `${splitUrl(originalUrl)}`,
  109 + "get host:",
  110 + `${host}`,
  111 + "get url:",
  112 + `${url}`,
  113 + "result:",
  114 + result
  115 + );
49 116
50   - return options;
  117 + ctx.body = result.data || {};
  118 +
  119 + return ctx.body;
51 120 }
52 121
53 122
54   - splitUrl(fullUrl) {
55   - const { config } = this;
  123 + async post() {
  124 + const { ctx, config, logger } = this;
  125 + const { originalUrl, session, curl, request } = ctx;
  126 + const { restful = {} } = config;
  127 + const { host } = restful;
  128 + const { access_token } = session.user_info
  129 + const url = splitUrl(originalUrl);
  130 + const options = getOptions(url, 'POST');
56 131
57   - if (config.prefix && config.prefix.length > 1) {
58   - fullUrl = fullUrl.substring(config.prefix.length - 1);
59   - }
  132 + addToken(options);
  133 + addParams(options);
60 134
61   - return fullUrl.substring(4);
  135 + const result = await curl(
  136 + `${host}${url}`,
  137 + {
  138 + method: 'POST',
  139 + dataType: 'json',
  140 + data: JSON.stringify(request.body),
  141 + headers: {
  142 + 'authorization': `Bearer ${access_token}`,
  143 + 'accept': 'application/json',
  144 + 'content-type': 'application/json'
  145 + }
  146 + }
  147 + );
  148 +
  149 + logger.info(
  150 + "post proxy url:",
  151 + `${host}${url}`,
  152 + 'headers',
  153 + {
  154 + 'authorization': `Bearer ${access_token}`,
  155 + 'accept': 'application/json',
  156 + 'content-type': 'application/json'
  157 + },
  158 + 'data',
  159 + JSON.stringify(request.body)
  160 + );
  161 +
  162 + ctx.body = result.data || {};
  163 +
  164 + return ctx.body;
62 165 }
63 166
  167 + async put() {
  168 + const { ctx, config, logger } = this;
  169 + const { originalUrl, session, curl, request } = ctx;
  170 + const { hroProxy = {} } = config;
  171 + const { host } = hroProxy;
  172 + const { access_token } = session.user_info;
  173 + const url = splitUrl(originalUrl);
  174 + const options = getOptions(url, 'PUT');
64 175
65   - async get() {
  176 + addToken(options);
  177 + addParams(options);
  178 +
  179 + const result = await curl(
  180 + `${host}${url}`,
  181 + {
  182 + method: 'PUT',
  183 + dataType: 'json',
  184 + data: JSON.stringify(request.body),
  185 + headers: {
  186 + 'authorization': `Bearer ${access_token}`,
  187 + 'accept': 'application/json',
  188 + 'content-type': 'application/json'
  189 + }
  190 + }
  191 + );
  192 +
  193 + logger.info(
  194 + "put proxy url:",
  195 + `${host}${url}`,
  196 + 'headers',
  197 + {
  198 + 'authorization': `Bearer ${access_token}`,
  199 + 'accept': 'application/json',
  200 + 'content-type': 'application/json'
  201 + },
  202 + 'data',
  203 + JSON.stringify(request.body)
  204 + );
  205 +
  206 + ctx.body = result.data || {};
  207 +
  208 + return ctx.body;
  209 + }
  210 +
  211 + async head() {
66 212 const { ctx, config, logger } = this;
67   - const { originalUrl } = ctx;
68   - const { restful = {} } = config;
69   - const { host } = restful;
70   - const { access_token } = ctx.session.user_info;
71   - const url = originalUrl.substring(4);
  213 + const { originalUrl, session, curl, request } = ctx;
  214 + const { hroProxy = {} } = config;
  215 + const { host } = hroProxy;
  216 + const { access_token } = session.user_info;
  217 + const url = splitUrl(originalUrl);
  218 + const options = getOptions(url, 'HEAD');
72 219
73   - const result = await ctx.curl(`${host}${url}`, {
74   - method: 'GET',
75   - dataType: 'json',
76   - headers: {
  220 + addToken(options);
  221 + addParams(options);
  222 +
  223 + const result = await curl(
  224 + `${host}${url}`,
  225 + {
  226 + method: 'HEAD',
  227 + dataType: 'json',
  228 + data: JSON.stringify(request.body),
  229 + headers: {
  230 + 'authorization': `Bearer ${access_token}`,
  231 + 'accept': 'application/json',
  232 + 'content-type': 'application/json'
  233 + }
  234 + }
  235 + );
  236 +
  237 + logger.info(
  238 + "head proxy url:",
  239 + `${host}${url}`,
  240 + 'headers',
  241 + {
77 242 'authorization': `Bearer ${access_token}`,
78 243 'accept': 'application/json',
79 244 'content-type': 'application/json'
80 245 },
81   - timeout: [5000, 60000]
82   - });
  246 + 'data',
  247 + JSON.stringify(request.body)
  248 + );
  249 +
  250 + ctx.body = result.data || {};
  251 +
  252 + return ctx.body;
  253 + }
  254 +
  255 + async del() {
  256 + const { ctx, config, logger } = this;
  257 + const { originalUrl, session, curl } = ctx;
  258 + const { hroProxy = {} } = config;
  259 + const { host } = hroProxy;
  260 + const { access_token } = session.user_info
  261 + const url = splitUrl(originalUrl);
  262 + const options = getOptions(url, 'DELETE');
  263 +
  264 + addToken(options);
  265 + addParams(options);
  266 + addContentLength(options);
  267 +
  268 + const result = await curl(
  269 + `${host}${url}`,
  270 + {
  271 + method: 'DELETE',
  272 + dataType: 'json',
  273 + headers: {
  274 + 'authorization': `Bearer ${access_token}`,
  275 + 'accept': 'application/json',
  276 + 'content-type': 'application/json'
  277 + }
  278 + }
  279 + );
83 280
84 281 logger.info(
85   - "proxy url:",
  282 + "delete proxy url:",
86 283 `${host}${url}`,
87 284 'headers:',
88 285 {
89 286 'authorization': `Bearer ${access_token}`,
90 287 'accept': 'application/json',
91 288 'content-type': 'application/json'
92   - },
93   - "result:",
94   - result
  289 + }
95 290 );
96 291
97   - ctx.body = result.data;
  292 + ctx.body = result.data || {};
98 293
99 294 return ctx.body;
100 295 }
... ...
1 1 'use strict';
2 2
3 3 module.exports = app => {
4   - const { router, controller } = app;
5   - const { proxy } = controller;
6   - // 给proxy设置token
7   - router.get(/^\/api\/[\w/]+/, 'proxy.get');
8   - // router.post(/^\/api\/[\w/]+/, 'proxy.post');
9   - // router.put(/^\/api\/[\w/]+/, 'proxy.put');
10   - // router.delete(/^\/api\/[\w/]+/, 'proxy.del');
  4 + const { router, controller } = app;
  5 + const { proxy } = controller;
  6 +
  7 + // 给proxy设置token
  8 + router.get(/^\/api\/[\w/]+/, 'proxy.get');
  9 + // router.post(/^\/api\/[\w/]+/, 'proxy.post');
  10 + // router.put(/^\/api\/[\w/]+/, 'proxy.put');
  11 + // router.head(/^\/api\/[\w/]+/, 'proxy.head');
  12 + // router.delete(/^\/api\/[\w/]+/, 'proxy.del');
11 13 }
\ No newline at end of file
... ...
... ... @@ -3,5 +3,5 @@
3 3 module.exports = app => {
4 4 const { router, controller } = app;
5 5
6   - router.get('/', controller.home.index);
  6 + router.get('/api', controller.home.index);
7 7 }
\ No newline at end of file
... ...
... ... @@ -58,7 +58,7 @@ module.exports = appInfo => {
58 58 };
59 59
60 60 config.static = {
61   - prefix: '',
  61 + prefix: '/',
62 62 dir: path.join(appInfo.baseDir, 'app/public'),
63 63 dynamic: true,//是否緩存靜態資源
64 64 preload: false,//啓動項目開啓緩存
... ...
注册登录 后发表评论