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
|
||||
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
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