diff --git a/lib/requestHandler/UserReqHandler.js b/lib/requestHandler/UserReqHandler.js index 87b211d..cdff75b 100644 --- a/lib/requestHandler/UserReqHandler.js +++ b/lib/requestHandler/UserReqHandler.js @@ -1,3 +1,7 @@ +/// + +import RequestErrorHandler from './requestErrorHandler'; + const url = require('url'), https = require('https'), @@ -12,8 +16,7 @@ const brotliTorb = require('brotli'), co = require('co'); -const requestErrorHandler = require('./requestErrorHandler'); - +const requestErrorHandler = new RequestErrorHandler(); const DEFAULT_CHUNK_COLLECT_THRESHOLD = 20 * 1024 * 1024; // about 20 mb // to fix issue with TLS cache, refer to: https://github.com/nodejs/node/issues/8368 @@ -203,7 +206,7 @@ export default class UserReqHandler { in http server: http://www.example.com/a/b/c in https server: /a/b/c */ - + const self = this; const host = req.headers.host; const protocol = (!!req.connection.encrypted && !(/^http:/).test(req.url)) ? 'https' : 'http'; const fullUrl = protocol === 'http' ? req.url : (protocol + '://' + host + req.url); @@ -331,7 +334,7 @@ export default class UserReqHandler { .then(() => { // record request info - if (this.recorder) { + if (self.recorder) { resourceInfo = { host, method: req.method, @@ -341,18 +344,18 @@ export default class UserReqHandler { req, startTime: new Date().getTime() }; - resourceInfoId = this.recorder.appendRecord(resourceInfo); + resourceInfoId = self.recorder.appendRecord(resourceInfo); } try { resourceInfo.reqBody = reqData.toString(); //TODO: deal reqBody in webInterface.js - this.recorder && this.recorder.updateRecord(resourceInfoId, resourceInfo); + self.recorder && self.recorder.updateRecord(resourceInfoId, resourceInfo); } catch (e) { } }) // invoke rule before sending request .then(co.wrap(function *() { - const userModifiedInfo = (yield this.userRule.beforeSendRequest(Object.assign({}, requestDetail))) || {}; + const userModifiedInfo = (yield self.userRule.beforeSendRequest(Object.assign({}, requestDetail))) || {}; const finalReqDetail = {}; ['protocol', 'requestOptions', 'requestData', 'response'].map((key) => { finalReqDetail[key] = userModifiedInfo[key] || requestDetail[key] @@ -368,7 +371,7 @@ export default class UserReqHandler { return userConfig; } else if (userConfig.requestOptions) { const remoteResponse = yield fetchRemoteResponse(userConfig.protocol, userConfig.requestOptions, userConfig.requestData, { - dangerouslyIgnoreUnauthorized: this.reqHandlerCtx.dangerouslyIgnoreUnauthorized, + dangerouslyIgnoreUnauthorized: self.reqHandlerCtx.dangerouslyIgnoreUnauthorized, chunkSizeThreshold, }); return { @@ -393,7 +396,7 @@ export default class UserReqHandler { return responseData; } else { // TODO: err etimeout - return (yield this.userRule.beforeSendResponse(Object.assign({}, requestDetail), Object.assign({}, responseData))) || responseData; + return (yield self.userRule.beforeSendResponse(Object.assign({}, requestDetail), Object.assign({}, responseData))) || responseData; } })) @@ -404,7 +407,7 @@ export default class UserReqHandler { // call user rule try { - const userResponse = yield this.userRule.onError(Object.assign({}, requestDetail), error); + const userResponse = yield self.userRule.onError(Object.assign({}, requestDetail), error); if (userResponse && userResponse.response && userResponse.response.header) { errorResponse = userResponse.response; } @@ -431,7 +434,7 @@ export default class UserReqHandler { // console.info('===> resbody in record', resourceInfo); - this.recorder && this.recorder.updateRecord(resourceInfoId, resourceInfo); + self.recorder && self.recorder.updateRecord(resourceInfoId, resourceInfo); }) .catch((e) => { logUtil.printLog(color.green('Send final response failed:' + e.message), logUtil.T_ERR); diff --git a/lib/requestHandler/index.js b/lib/requestHandler/index.js index e2a249c..76b375c 100644 --- a/lib/requestHandler/index.js +++ b/lib/requestHandler/index.js @@ -1,5 +1,7 @@ 'use strict'; +import UserReqHandler from './UserReqHandler'; + const net = require('net'), color = require('colorful'), @@ -10,8 +12,6 @@ const CommonReadableStream = require('./CommonReadableStream'), HttpsServerMgr = require('../httpsServerMgr'); -const UserReqHandler = require('./UserReqHandler').default; - /** * get request info from the ws client, includes: host @@ -429,7 +429,7 @@ class RequestHandler { const userRule = util.merge(default_rule, rule); const userReqHandler = new UserReqHandler(reqHandlerCtx, userRule, recorder); - reqHandlerCtx.userRequestHandler = userReqHandler.handler.bind(reqHandlerCtx); + reqHandlerCtx.userRequestHandler = userReqHandler.handler.bind(userReqHandler); reqHandlerCtx.wsHandler = getWsHandler.bind(this, userRule, recorder); reqHandlerCtx.httpsServerMgr = new HttpsServerMgr({ diff --git a/lib/util.ts b/lib/util.ts index 6a6d227..ce34729 100644 --- a/lib/util.ts +++ b/lib/util.ts @@ -14,7 +14,7 @@ import * as mime from 'mime-types'; import * as color from 'colorful'; import { Buffer } from 'buffer'; import { execSync } from 'child_process'; -import * as logUtil from './log'; +import logUtil from './log'; const networkInterfaces = require('os').networkInterfaces(); diff --git a/types/index.d.ts b/types/index.d.ts deleted file mode 100644 index e2535c1..0000000 --- a/types/index.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -export interface AnyProxyConfig { - port: number -} diff --git a/typings/index.d.ts b/typings/index.d.ts new file mode 100644 index 0000000..fe83544 --- /dev/null +++ b/typings/index.d.ts @@ -0,0 +1,11 @@ +declare interface AnyProxyConfig { + port: number +} +declare interface AnyProxyRule { + summary?: string, + beforeSendRequest?: Function, + beforeSendResponse?: Function, + beforeDealHttpsRequest?: Function, + onError?: Function, + onConnectError?: Function +} \ No newline at end of file