diff --git a/README.md b/README.md index 262ccf5..6ab32b4 100644 --- a/README.md +++ b/README.md @@ -284,26 +284,6 @@ Returns the form data as a string. Don't use this if you are sending files or bu ### Integration with other libraries -#### Request - -Form submission using [request](https://github.com/request/request): - -```javascript -var formData = { - my_field: 'my_value', - my_file: fs.createReadStream(__dirname + '/unicycle.jpg'), -}; - -request.post({url:'http://service.com/upload', formData: formData}, function (err, httpResponse, body) { - if (err) { - return console.error('upload failed:', err); - } - console.log('Upload successful! Server responded with:', body); -}); -``` - -For more details see [request readme](https://github.com/request/request#multipartform-data-multipart-form-uploads). - #### node-fetch You can also submit a form using [node-fetch](https://github.com/bitinn/node-fetch): diff --git a/package.json b/package.json index f8d6117..eafd19c 100644 --- a/package.json +++ b/package.json @@ -65,7 +65,6 @@ "pkgfiles": "^2.3.2", "pre-commit": "^1.2.2", "puppeteer": "^1.20.0", - "request": "~2.87.0", "rimraf": "^2.7.1", "semver": "^6.3.1", "tape": "^5.9.0" diff --git a/test/common.js b/test/common.js index 53e27c3..386f65d 100644 --- a/test/common.js +++ b/test/common.js @@ -7,9 +7,26 @@ var http = require('http'); var IncomingForm = require('formidable').IncomingForm; var hasOwn = require('hasown'); +var PassThrough = require('stream').PassThrough; + var common = module.exports; var rootDir = path.join(__dirname, '..'); + +// Helper to get a remote file as a stream using native http +// Replaces request(url) pattern for testing +// Sets .path property so form-data can extract filename +common.getRemoteStream = function (url) { + var pass = new PassThrough(); + // Set path property for filename extraction (mimics request behavior) + pass.path = url; + http.get(url, function (res) { + res.pipe(pass); + }).on('error', function (err) { + pass.destroy(err); + }); + return pass; +}; common.dir = { lib: path.join(rootDir, '/lib'), fixture: path.join(rootDir, '/test/fixture'), diff --git a/test/integration/test-pipe.js b/test/integration/test-pipe.js index d4a5654..cf3ecad 100644 --- a/test/integration/test-pipe.js +++ b/test/integration/test-pipe.js @@ -4,7 +4,6 @@ var common = require('../common'); var assert = common.assert; var http = require('http'); var mime = require('mime-types'); -var request = require('request'); var fs = require('fs'); var FormData = require(common.dir.lib + '/form_data'); var IncomingForm = require('formidable').IncomingForm; @@ -30,7 +29,7 @@ var FIELDS = { }, remote_file: { type: mime.lookup(common.dir.fixture + '/unicycle.jpg'), - value: function () { return request(remoteFile); } + value: function () { return common.getRemoteStream(remoteFile); } } }; var fieldsPassed = Object.keys(FIELDS).length; diff --git a/test/integration/test-request.js b/test/integration/test-request.js deleted file mode 100644 index 88200d3..0000000 --- a/test/integration/test-request.js +++ /dev/null @@ -1,93 +0,0 @@ -'use strict'; - -/** - * Show & Test for `mikeal/request` library - * as bonus shows progress monitor implementation - */ -var common = require('../common'); -var assert = common.assert; -var http = require('http'); -var path = require('path'); -var mime = require('mime-types'); -var request = require('request'); -var FormData = require(common.dir.lib + '/form_data'); -var fs = require('fs'); -var IncomingForm = require('formidable').IncomingForm; - -var fileName = common.dir.fixture + '/unicycle.jpg'; -var myFile = function () { return fs.createReadStream(fileName); }; -var numItems = 5; - -// Make request to use our FormData -request.prototype.form = function (form) { - var self = this; - if (form) { - if (!(/^application\/x-www-form-urlencoded\b/).test(self.getHeader('content-type'))) { - self.setHeader('content-type', 'application/x-www-form-urlencoded'); - } - self.body = typeof form === 'string' - ? self._qs.rfc3986(form.toString('utf8')) - : self._qs.stringify(form).toString('utf8'); - return self; - } - // create form-data object - self._form = new FormData(); - self._form.on('error', function (err) { - err.message = 'form-data: ' + err.message; // eslint-disable-line no-param-reassign - self.emit('error', err); - self.abort(); - }); - return self._form; -}; - -var server = http.createServer(function (req, res) { - var form = new IncomingForm({ uploadDir: common.dir.tmp }); - - form.parse(req); - - form - .on('file', function (name, file) { - numItems -= 1; - assert.strictEqual(file.name, path.basename(fileName)); - assert.strictEqual(file.type, mime.lookup(file.name)); - }) - .on('end', common.actions.formOnEnd.bind(null, res)); -}); - -server.listen(common.port, function () { - var uploadSize = 0; - var uploaded = 0; - - var r = request.post('http://localhost:' + common.port + '/', function (err, res) { - assert.ifError(err); - assert.strictEqual(res.statusCode, 200); - server.close(); - }); - - var form = r.form(); - - for (var i = 0; i < numItems; i++) { - form.append('file_' + i, myFile()); - } - - // get upload size - form.getLength(function (err, size) { - assert.equal(err, null); - uploadSize = size; - assert.ok(uploadSize > 0); - }); - - // calculate uploaded size chunk by chunk - form.on('data', function (data) { - uploaded += data.length; - }); - - // done uploading compare sizes - form.on('end', function () { - assert.equal(uploaded, uploadSize); - }); -}); - -process.on('exit', function () { - assert.strictEqual(numItems, 0); -}); diff --git a/test/integration/test-submit-custom-header.js b/test/integration/test-submit-custom-header.js index aa6d79e..439f3b0 100644 --- a/test/integration/test-submit-custom-header.js +++ b/test/integration/test-submit-custom-header.js @@ -4,7 +4,6 @@ var common = require('../common'); var assert = common.assert; var http = require('http'); var mime = require('mime-types'); -var request = require('request'); var fs = require('fs'); var FormData = require(common.dir.lib + '/form_data'); var IncomingForm = require('formidable').IncomingForm; @@ -29,7 +28,7 @@ var FIELDS = { }, remote_file: { type: mime.lookup(common.dir.fixture + '/unicycle.jpg'), - value: function () { return request(remoteFile); } + value: function () { return common.getRemoteStream(remoteFile); } } }; var fieldsPassed = Object.keys(FIELDS).length; diff --git a/test/integration/test-submit-custom.js b/test/integration/test-submit-custom.js index eaf508d..b08fa31 100644 --- a/test/integration/test-submit-custom.js +++ b/test/integration/test-submit-custom.js @@ -3,7 +3,6 @@ var common = require('../common'); var assert = common.assert; var mime = require('mime-types'); -var request = require('request'); var fs = require('fs'); var FormData = require(common.dir.lib + '/form_data'); @@ -27,7 +26,7 @@ var FIELDS = { }, remote_file: { type: mime.lookup(common.dir.fixture + '/unicycle.jpg'), - value: function () { return request(remoteFile); } + value: function () { return common.getRemoteStream(remoteFile); } } }; diff --git a/test/integration/test-submit.js b/test/integration/test-submit.js index f0780e4..5ceb1c1 100644 --- a/test/integration/test-submit.js +++ b/test/integration/test-submit.js @@ -3,7 +3,6 @@ var common = require('../common'); var assert = common.assert; var mime = require('mime-types'); -var request = require('request'); var fs = require('fs'); var FormData = require(common.dir.lib + '/form_data'); @@ -27,7 +26,7 @@ var FIELDS = { }, remote_file: { type: mime.lookup(common.dir.fixture + '/unicycle.jpg'), - value: function () { return request(remoteFile); } + value: function () { return common.getRemoteStream(remoteFile); } } };