From 7693a7d645740e7a1d2f17f04310eb7d183bcaae Mon Sep 17 00:00:00 2001 From: Vsevolod Strukchinsky Date: Tue, 30 Dec 2014 13:41:21 +0500 Subject: [PATCH] Add readable streams support in options.body --- index.js | 6 ++++-- package.json | 2 ++ readme.md | 2 +- test/test-post.js | 7 ++++++- 4 files changed, 13 insertions(+), 4 deletions(-) diff --git a/index.js b/index.js index 8647e35..c2f978c 100644 --- a/index.js +++ b/index.js @@ -7,6 +7,7 @@ var duplexify = require('duplexify'); var assign = require('object-assign'); var read = require('read-all-stream'); var timeout = require('timed-out'); +var isReadableStream = require('isstream').isReadable; function got(url, opts, cb) { if (typeof opts === 'function') { @@ -98,7 +99,7 @@ function got(url, opts, cb) { } if (!proxy) { - req.end(body); + isReadableStream(body) ? body.pipe(req) : req.end(body); return; } @@ -106,7 +107,8 @@ function got(url, opts, cb) { proxy.write = function () { throw new Error('got\'s stream is not writable when options.body is used'); }; - req.end(body); + + isReadableStream(body) ? body.pipe(req) : req.end(body); return; } diff --git a/package.json b/package.json index 6943205..3fcd52c 100644 --- a/package.json +++ b/package.json @@ -32,11 +32,13 @@ ], "dependencies": { "duplexify": "^3.2.0", + "isstream": "^0.1.1", "object-assign": "^2.0.0", "read-all-stream": "^0.1.0", "timed-out": "^2.0.0" }, "devDependencies": { + "from2-array": "0.0.3", "tape": "^3.0.3", "taper": "^0.3.0" } diff --git a/readme.md b/readme.md index 4138aa8..4d251a8 100644 --- a/readme.md +++ b/readme.md @@ -63,7 +63,7 @@ Encoding to be used on `setEncoding` of the response data. If null, the body is ##### options.body -Type: `string`, `Buffer` +Type: `string`, `Buffer`, `ReadableStream` Body, that will be sent with `POST` request. If present in `options` and `options.method` is not set - `options.method` will be set to `POST`. diff --git a/test/test-post.js b/test/test-post.js index 76a3a2d..32d12e4 100644 --- a/test/test-post.js +++ b/test/test-post.js @@ -3,6 +3,7 @@ var tape = require('tape'); var got = require('../'); var server = require('./server.js'); +var from = require('from2-array'); var s = server.createServer(); @@ -17,7 +18,7 @@ tape('setup', function (t) { }); tape('send data from options with post request', function (t) { - t.plan(2); + t.plan(3); got(s.url, {body: 'wow'}, function (err, data) { t.equal(data, 'wow'); @@ -26,6 +27,10 @@ tape('send data from options with post request', function (t) { got(s.url, {body: new Buffer('wow')}, function (err, data) { t.equal(data, 'wow'); }); + + got(s.url, {body: from(['wow'])}, function (err, data) { + t.equal(data, 'wow'); + }); }); tape('return writeable stream', function (t) {