1
0
mirror of https://github.com/alibaba/anyproxy.git synced 2025-05-10 06:48:26 +00:00

修正this指向错误的bug

This commit is contained in:
砚然 2018-08-24 16:03:38 +08:00
parent 98264facde
commit 51abd0532c
5 changed files with 29 additions and 18 deletions

@ -1,3 +1,7 @@
/// <reference path="../../typings/index.d.ts" />
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);

@ -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({

@ -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();

3
types/index.d.ts vendored

@ -1,3 +0,0 @@
export interface AnyProxyConfig {
port: number
}

11
typings/index.d.ts vendored Normal file

@ -0,0 +1,11 @@
declare interface AnyProxyConfig {
port: number
}
declare interface AnyProxyRule {
summary?: string,
beforeSendRequest?: Function,
beforeSendResponse?: Function,
beforeDealHttpsRequest?: Function,
onError?: Function,
onConnectError?: Function
}