mirror of
https://github.com/alibaba/anyproxy.git
synced 2025-05-10 06:48:26 +00:00
修正this指向错误的bug
This commit is contained in:
parent
98264facde
commit
51abd0532c
@ -1,3 +1,7 @@
|
|||||||
|
/// <reference path="../../typings/index.d.ts" />
|
||||||
|
|
||||||
|
import RequestErrorHandler from './requestErrorHandler';
|
||||||
|
|
||||||
const
|
const
|
||||||
url = require('url'),
|
url = require('url'),
|
||||||
https = require('https'),
|
https = require('https'),
|
||||||
@ -12,8 +16,7 @@ const
|
|||||||
brotliTorb = require('brotli'),
|
brotliTorb = require('brotli'),
|
||||||
co = require('co');
|
co = require('co');
|
||||||
|
|
||||||
const requestErrorHandler = require('./requestErrorHandler');
|
const requestErrorHandler = new RequestErrorHandler();
|
||||||
|
|
||||||
const DEFAULT_CHUNK_COLLECT_THRESHOLD = 20 * 1024 * 1024; // about 20 mb
|
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
|
// 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 http server: http://www.example.com/a/b/c
|
||||||
in https server: /a/b/c
|
in https server: /a/b/c
|
||||||
*/
|
*/
|
||||||
|
const self = this;
|
||||||
const host = req.headers.host;
|
const host = req.headers.host;
|
||||||
const protocol = (!!req.connection.encrypted && !(/^http:/).test(req.url)) ? 'https' : 'http';
|
const protocol = (!!req.connection.encrypted && !(/^http:/).test(req.url)) ? 'https' : 'http';
|
||||||
const fullUrl = protocol === 'http' ? req.url : (protocol + '://' + host + req.url);
|
const fullUrl = protocol === 'http' ? req.url : (protocol + '://' + host + req.url);
|
||||||
@ -331,7 +334,7 @@ export default class UserReqHandler {
|
|||||||
|
|
||||||
.then(() => {
|
.then(() => {
|
||||||
// record request info
|
// record request info
|
||||||
if (this.recorder) {
|
if (self.recorder) {
|
||||||
resourceInfo = {
|
resourceInfo = {
|
||||||
host,
|
host,
|
||||||
method: req.method,
|
method: req.method,
|
||||||
@ -341,18 +344,18 @@ export default class UserReqHandler {
|
|||||||
req,
|
req,
|
||||||
startTime: new Date().getTime()
|
startTime: new Date().getTime()
|
||||||
};
|
};
|
||||||
resourceInfoId = this.recorder.appendRecord(resourceInfo);
|
resourceInfoId = self.recorder.appendRecord(resourceInfo);
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
resourceInfo.reqBody = reqData.toString(); //TODO: deal reqBody in webInterface.js
|
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) { }
|
} catch (e) { }
|
||||||
})
|
})
|
||||||
|
|
||||||
// invoke rule before sending request
|
// invoke rule before sending request
|
||||||
.then(co.wrap(function *() {
|
.then(co.wrap(function *() {
|
||||||
const userModifiedInfo = (yield this.userRule.beforeSendRequest(Object.assign({}, requestDetail))) || {};
|
const userModifiedInfo = (yield self.userRule.beforeSendRequest(Object.assign({}, requestDetail))) || {};
|
||||||
const finalReqDetail = {};
|
const finalReqDetail = {};
|
||||||
['protocol', 'requestOptions', 'requestData', 'response'].map((key) => {
|
['protocol', 'requestOptions', 'requestData', 'response'].map((key) => {
|
||||||
finalReqDetail[key] = userModifiedInfo[key] || requestDetail[key]
|
finalReqDetail[key] = userModifiedInfo[key] || requestDetail[key]
|
||||||
@ -368,7 +371,7 @@ export default class UserReqHandler {
|
|||||||
return userConfig;
|
return userConfig;
|
||||||
} else if (userConfig.requestOptions) {
|
} else if (userConfig.requestOptions) {
|
||||||
const remoteResponse = yield fetchRemoteResponse(userConfig.protocol, userConfig.requestOptions, userConfig.requestData, {
|
const remoteResponse = yield fetchRemoteResponse(userConfig.protocol, userConfig.requestOptions, userConfig.requestData, {
|
||||||
dangerouslyIgnoreUnauthorized: this.reqHandlerCtx.dangerouslyIgnoreUnauthorized,
|
dangerouslyIgnoreUnauthorized: self.reqHandlerCtx.dangerouslyIgnoreUnauthorized,
|
||||||
chunkSizeThreshold,
|
chunkSizeThreshold,
|
||||||
});
|
});
|
||||||
return {
|
return {
|
||||||
@ -393,7 +396,7 @@ export default class UserReqHandler {
|
|||||||
return responseData;
|
return responseData;
|
||||||
} else {
|
} else {
|
||||||
// TODO: err etimeout
|
// 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
|
// call user rule
|
||||||
try {
|
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) {
|
if (userResponse && userResponse.response && userResponse.response.header) {
|
||||||
errorResponse = userResponse.response;
|
errorResponse = userResponse.response;
|
||||||
}
|
}
|
||||||
@ -431,7 +434,7 @@ export default class UserReqHandler {
|
|||||||
|
|
||||||
// console.info('===> resbody in record', resourceInfo);
|
// console.info('===> resbody in record', resourceInfo);
|
||||||
|
|
||||||
this.recorder && this.recorder.updateRecord(resourceInfoId, resourceInfo);
|
self.recorder && self.recorder.updateRecord(resourceInfoId, resourceInfo);
|
||||||
})
|
})
|
||||||
.catch((e) => {
|
.catch((e) => {
|
||||||
logUtil.printLog(color.green('Send final response failed:' + e.message), logUtil.T_ERR);
|
logUtil.printLog(color.green('Send final response failed:' + e.message), logUtil.T_ERR);
|
||||||
|
@ -1,5 +1,7 @@
|
|||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
|
import UserReqHandler from './UserReqHandler';
|
||||||
|
|
||||||
const
|
const
|
||||||
net = require('net'),
|
net = require('net'),
|
||||||
color = require('colorful'),
|
color = require('colorful'),
|
||||||
@ -10,8 +12,6 @@ const
|
|||||||
CommonReadableStream = require('./CommonReadableStream'),
|
CommonReadableStream = require('./CommonReadableStream'),
|
||||||
HttpsServerMgr = require('../httpsServerMgr');
|
HttpsServerMgr = require('../httpsServerMgr');
|
||||||
|
|
||||||
const UserReqHandler = require('./UserReqHandler').default;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* get request info from the ws client, includes:
|
* get request info from the ws client, includes:
|
||||||
host
|
host
|
||||||
@ -429,7 +429,7 @@ class RequestHandler {
|
|||||||
const userRule = util.merge(default_rule, rule);
|
const userRule = util.merge(default_rule, rule);
|
||||||
|
|
||||||
const userReqHandler = new UserReqHandler(reqHandlerCtx, userRule, recorder);
|
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.wsHandler = getWsHandler.bind(this, userRule, recorder);
|
||||||
|
|
||||||
reqHandlerCtx.httpsServerMgr = new HttpsServerMgr({
|
reqHandlerCtx.httpsServerMgr = new HttpsServerMgr({
|
||||||
|
@ -14,7 +14,7 @@ import * as mime from 'mime-types';
|
|||||||
import * as color from 'colorful';
|
import * as color from 'colorful';
|
||||||
import { Buffer } from 'buffer';
|
import { Buffer } from 'buffer';
|
||||||
import { execSync } from 'child_process';
|
import { execSync } from 'child_process';
|
||||||
import * as logUtil from './log';
|
import logUtil from './log';
|
||||||
|
|
||||||
|
|
||||||
const networkInterfaces = require('os').networkInterfaces();
|
const networkInterfaces = require('os').networkInterfaces();
|
||||||
|
3
types/index.d.ts
vendored
3
types/index.d.ts
vendored
@ -1,3 +0,0 @@
|
|||||||
export interface AnyProxyConfig {
|
|
||||||
port: number
|
|
||||||
}
|
|
11
typings/index.d.ts
vendored
Normal file
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
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user