Skip to content

Commit a4ddd6a

Browse files
committed
change set header function, not call this.request() until call this.end()
1 parent 3768360 commit a4ddd6a

File tree

2 files changed

+52
-11
lines changed

2 files changed

+52
-11
lines changed

lib/node/index.js

Lines changed: 20 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,9 @@ function Request(method, url) {
124124
this._formData = null;
125125
this.method = method;
126126
this.url = url;
127-
this.header = {};
127+
this.header = {
128+
'User-Agent': 'node-superagent/' + pkg.version
129+
};
128130
this.writable = true;
129131
this._redirects = 0;
130132
this.redirects(5);
@@ -271,7 +273,7 @@ Request.prototype.set = function(field, val){
271273
}
272274

273275
debug('set %s "%s"', field, val);
274-
this.request().setHeader(field, val);
276+
this.header[field] = val;
275277
return this;
276278
};
277279

@@ -291,7 +293,8 @@ Request.prototype.set = function(field, val){
291293

292294
Request.prototype.unset = function(field){
293295
debug('unset %s', field);
294-
this.request().removeHeader(field);
296+
297+
delete this.header[field];
295298
return this;
296299
};
297300

@@ -304,7 +307,7 @@ Request.prototype.unset = function(field){
304307
*/
305308

306309
Request.prototype.get = function(field){
307-
return this.request().getHeader(field);
310+
return this.header[field];
308311
};
309312

310313
/**
@@ -431,9 +434,7 @@ Request.prototype.query = function(val){
431434

432435
Request.prototype.send = function(data){
433436
var obj = isObject(data);
434-
var req = this.request();
435-
var type = req.getHeader('Content-Type');
436-
437+
var type = this.get('Content-Type');
437438
// merge
438439
if (obj && isObject(this._data)) {
439440
for (var key in data) {
@@ -443,7 +444,7 @@ Request.prototype.send = function(data){
443444
} else if ('string' == typeof data) {
444445
// default to x-www-form-urlencoded
445446
if (!type) this.type('form');
446-
type = req.getHeader('Content-Type');
447+
type = this.get('Content-Type');
447448

448449
// concat &
449450
if ('application/x-www-form-urlencoded' == type) {
@@ -637,6 +638,13 @@ Request.prototype.redirect = function(res){
637638

638639
delete this.req;
639640

641+
// remove all add header except User-Agent
642+
for (var key in this.header) {
643+
if (key !== 'User-Agent') {
644+
delete this.header[key]
645+
}
646+
}
647+
640648
// redirect
641649
this.url = url;
642650
this._redirectList.push(url);
@@ -753,8 +761,9 @@ Request.prototype.request = function(){
753761
// add cookies
754762
if (this.cookies) req.setHeader('Cookie', this.cookies);
755763

756-
// set default UA
757-
req.setHeader('User-Agent', 'node-superagent/' + pkg.version);
764+
for (var key in this.header) {
765+
req.setHeader(key, this.header[key]);
766+
}
758767

759768
return req;
760769
};
@@ -861,7 +870,7 @@ Request.prototype.end = function(fn){
861870

862871
// content-length
863872
if (data && !req.getHeader('Content-Length')) {
864-
this.set('Content-Length', Buffer.isBuffer(data) ? data.length : Buffer.byteLength(data));
873+
req.setHeader('Content-Length', Buffer.isBuffer(data) ? data.length : Buffer.byteLength(data));
865874
}
866875
}
867876

test/use.js

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
var setup = require('./support/setup');
2+
var NODE = setup.NODE;
3+
var uri = setup.uri;
4+
5+
var assert = require('assert');
6+
var request = require('../');
7+
8+
describe('request', function(){
9+
this.timeout(10000);
10+
describe('use', function(){
11+
it('should use plugin success', function(done){
12+
var now = '' + Date.now();
13+
function uuid(req){
14+
req.set('X-UUID', now);
15+
return req;
16+
}
17+
function prefix(req){
18+
req.url = uri + req.url
19+
return req;
20+
}
21+
request
22+
.get('/echo')
23+
.use(uuid)
24+
.use(prefix)
25+
.end(function(err, res){
26+
assert(res.statusCode === 200);
27+
assert.equal(res.get('X-UUID'), now);
28+
done();
29+
})
30+
})
31+
})
32+
})

0 commit comments

Comments
 (0)