http: emit abort event from ClientRequest
ClientRequest will now emit an abort event the first time abort() is called. Semver: Minor Fixes: https://github.com/joyent/node/issues/9278 PR-URL: https://github.com/iojs/io.js/pull/945 Reviewed-By: Colin Ihrig <cjihrig@gmail.com> Reviewed-By: Chris Dickinson <christopher.s.dickinson@gmail.com>
This commit is contained in:
parent
89e133a1d8
commit
2ca22aacbd
@ -859,6 +859,13 @@ Emitted when the server sends a '100 Continue' HTTP response, usually because
|
|||||||
the request contained 'Expect: 100-continue'. This is an instruction that
|
the request contained 'Expect: 100-continue'. This is an instruction that
|
||||||
the client should send the request body.
|
the client should send the request body.
|
||||||
|
|
||||||
|
### Event: 'abort'
|
||||||
|
|
||||||
|
`function () { }`
|
||||||
|
|
||||||
|
Emitted when the request has been aborted by the client. This event is only
|
||||||
|
emitted on the first call to `abort()`.
|
||||||
|
|
||||||
### request.flush()
|
### request.flush()
|
||||||
|
|
||||||
Flush the request headers.
|
Flush the request headers.
|
||||||
|
@ -166,6 +166,12 @@ ClientRequest.prototype._implicitHeader = function() {
|
|||||||
};
|
};
|
||||||
|
|
||||||
ClientRequest.prototype.abort = function() {
|
ClientRequest.prototype.abort = function() {
|
||||||
|
var self = this;
|
||||||
|
if (this.aborted === undefined) {
|
||||||
|
process.nextTick(function() {
|
||||||
|
self.emit('abort');
|
||||||
|
});
|
||||||
|
}
|
||||||
// Mark as aborting so we can avoid sending queued request data
|
// Mark as aborting so we can avoid sending queued request data
|
||||||
// This is used as a truthy flag elsewhere. The use of Date.now is for
|
// This is used as a truthy flag elsewhere. The use of Date.now is for
|
||||||
// debugging purposes only.
|
// debugging purposes only.
|
||||||
|
28
test/parallel/test-http-client-abort-event.js
Normal file
28
test/parallel/test-http-client-abort-event.js
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
var assert = require('assert');
|
||||||
|
var http = require('http');
|
||||||
|
var common = require('../common');
|
||||||
|
var server = http.createServer(function(req, res) {
|
||||||
|
res.end();
|
||||||
|
});
|
||||||
|
var count = 0;
|
||||||
|
server.listen(common.PORT, function() {
|
||||||
|
var req = http.request({
|
||||||
|
port: common.PORT
|
||||||
|
}, function() {
|
||||||
|
assert(false, 'should not receive data');
|
||||||
|
});
|
||||||
|
|
||||||
|
req.on('abort', function() {
|
||||||
|
// should only be emitted once
|
||||||
|
count++;
|
||||||
|
server.close();
|
||||||
|
});
|
||||||
|
|
||||||
|
req.end();
|
||||||
|
req.abort();
|
||||||
|
req.abort();
|
||||||
|
});
|
||||||
|
|
||||||
|
process.on('exit', function() {
|
||||||
|
assert.equal(count, 1);
|
||||||
|
})
|
Loading…
x
Reference in New Issue
Block a user