@@ -40,7 +40,7 @@ module.exports = function proxy(host, options) {
4040 var limit = options . limit || '1mb' ;
4141
4242 return function handleProxy ( req , res , next ) {
43- if ( filter && ! filter ( req , res ) ) next ( ) ;
43+ if ( filter && ! filter ( req , res ) ) return next ( ) ;
4444
4545 var headers = options . headers || { } ;
4646 var path ;
@@ -93,26 +93,42 @@ module.exports = function proxy(host, options) {
9393 var rspData = Buffer . concat ( chunks , totalLength ) ;
9494
9595 if ( intercept ) {
96- intercept ( rspData , req , res , function ( err , rsp , sent ) {
96+ intercept ( rspData , req , res , function ( err , rspd , sent ) {
9797 if ( err ) {
9898 return next ( err ) ;
9999 }
100+
101+ var encode = 'utf8' ;
102+ if ( rsp . headers && rsp . headers [ 'content-type' ] ) {
103+ var contentType = rsp . headers [ 'content-type' ] ;
104+ if ( / c h a r s e t = / . test ( contentType ) ) {
105+ var attrs = contentType . split ( ';' ) . map ( function ( str ) { return str . trim ( ) ; } ) ;
106+ for ( var i = 0 , len = attrs . length ; i < len ; i ++ ) {
107+ var attr = attrs [ i ] ;
108+ if ( / c h a r s e t = / . test ( attr ) ) {
109+ // encode = attr.split('=')[1];
110+ break ;
111+ }
112+ }
113+ }
114+ }
115+
116+ if ( typeof rspd == 'string' )
117+ rspd = new Buffer ( rspd , encode ) ;
100118
101- if ( typeof rsp == 'string' )
102- rsp = new Buffer ( rsp , 'utf8' ) ;
103-
104- if ( ! Buffer . isBuffer ( rsp ) ) {
119+ if ( ! Buffer . isBuffer ( rspd ) ) {
105120 next ( new Error ( "intercept should return string or buffer as data" ) ) ;
106121 }
107122
108123 if ( ! res . headersSent )
109- res . set ( 'content-length' , rsp . length ) ;
110- else if ( rsp . length != rspData . length ) {
124+ res . set ( 'content-length' , rspd . length ) ;
125+ else if ( rspd . length != rspData . length ) {
111126 next ( new Error ( "'Content-Length' is already sent, the length of response data can not be changed" ) ) ;
112127 }
113128
114- if ( ! sent )
115- res . send ( rsp ) ;
129+ if ( ! sent ) {
130+ res . send ( rspd ) ;
131+ }
116132 } ) ;
117133 } else {
118134 res . send ( rspData ) ;
0 commit comments