Skip to content

Commit f941292

Browse files
committed
fix: node:request
- proper handling of json - simpler syntax - proper handling of files
1 parent 9ac52fd commit f941292

14 files changed

Lines changed: 213 additions & 145 deletions

‎src/targets/node/request.js‎

Lines changed: 70 additions & 82 deletions
Original file line numberDiff line numberDiff line change
@@ -1,119 +1,107 @@
11
'use strict';
22

33
var util = require('util');
4-
var reducer = require('.,/../../reducer');
4+
var path = require('path');
55

6-
module.exports = function(options) {
6+
module.exports = function (options) {
77
var opts = util._extend({
88
indent: ' '
99
}, options);
1010

11-
var code = [];
11+
var code = ['var request = require("request");', null];
1212

1313
var reqOpts = {
14-
url: this.source.fullUrl,
15-
headers: this.source.headersObj
14+
method: this.source.method,
15+
url: this.source.url
1616
};
17-
var fsReplace = [];
18-
if (this.source.headersObj['Content-Type'] === 'application/x-www-form-urlencoded') {
19-
reqOpts.formData = this.source.postData.params.reduce(function(finalObj, thisParam) {
20-
finalObj[thisParam.name] = thisParam.value;
21-
return finalObj;
22-
}, {});
17+
18+
if (Object.keys(this.source.queryObj).length) {
19+
reqOpts.qs = this.source.queryObj;
2320
}
24-
else if (this.source.headersObj['Content-Type'] === 'application/json') {
25-
if (this.source.postData.params) {
26-
reqOpts.body = JSON.stringify(
27-
this.source.postData.params.reduce(function(finalObj, thisParam) {
28-
finalObj[thisParam.name] = thisParam.value;
29-
return finalObj;
30-
}, {})
31-
);
32-
}
33-
reqOpts.json = true;
21+
22+
if (Object.keys(this.source.headersObj).length) {
23+
reqOpts.headers = this.source.headersObj;
3424
}
35-
else if (this.source.headersObj["Content-Type"] === "multipart/form-data") {
36-
this.source.postData.params.forEach(function(param) {
37-
reqOpts.formData = reqOpts.formData || {};
38-
reqOpts.formData[param.name] = {};
39-
if (param.fileName) {
40-
if (!param.value.length) {
41-
param.value = 'fs.createReadStream(\'' + param.fileName + '\')';
42-
fsReplace.push(param.value);
43-
}
44-
reqOpts.formData[param.name].value = param.value;
45-
if (param.fileName.indexOf('/') > -1) {
46-
param.fileName = param.fileName.split('/');
47-
param.fileName = param.fileName[param.fileName.length - 1];
48-
}
49-
else if (param.fileName.indexOf('\\') > -1) {
50-
param.fileName = param.fileName.split('\\');
51-
param.fileName = param.fileName[param.fileName.length - 1];
25+
26+
var includeFS = false;
27+
28+
switch (this.source.postData.mimeType) {
29+
case 'application/x-www-form-urlencoded':
30+
reqOpts.form = this.source.postData.paramsObj;
31+
break;
32+
33+
case 'application/json':
34+
reqOpts.body = this.source.postData.jsonObj;
35+
reqOpts.json = true;
36+
break;
37+
38+
case 'multipart/form-data':
39+
reqOpts.formData = {};
40+
41+
this.source.postData.params.forEach(function (param) {
42+
var attachement = {};
43+
44+
if (param.value) {
45+
attachement.value = param.value;
46+
} else if (param.fileName) {
47+
includeFS = true;
48+
attachement.value = 'fs.createReadStream("' + param.fileName + '")';
5249
}
53-
reqOpts.formData[param.name].options = {
54-
filename: param.fileName,
55-
"content-type": param.contentType
50+
51+
if (param.fileName) {
52+
var base = path.parse(param.fileName).base;
53+
54+
attachement.options = {
55+
filename: base.length ? base : 'filename',
56+
contentType: param.contentType ? param.contentType : null
57+
};
5658
}
57-
}
58-
else {
59-
reqOpts.formData[param.name] = param.value;
60-
}
61-
})
62-
}
63-
else {
64-
reqOpts.body = this.source.postData.params;
59+
60+
reqOpts.formData[param.name] = attachement;
61+
});
62+
break;
63+
64+
default:
65+
reqOpts.body = this.source.postData.text;
6566
}
6667

67-
var simpleRequest =
68-
this.source.cookies.length === 0 &&
69-
this.source.headers.length === 0 && (
70-
!this.source.postData.params ||
71-
this.source.postData.params.length === 0
72-
);
73-
7468
// construct cookies argument
75-
var cookies = this.source.cookies.map(function(cookie) {
76-
return encodeURIComponent(cookie.name) + '=' + encodeURIComponent(cookie.value);
77-
});
69+
if (this.source.cookies.length) {
70+
reqOpts.jar = 'JAR';
7871

79-
if (cookies.length) {
80-
reqOpts.headers.Cookie = cookies.join('; ');
81-
}
72+
code.push(null);
73+
code.push('var jar = request.jar();');
8274

83-
code.push('var request = require(\'request\');');
84-
if (fsReplace.length > 0) {
85-
code.push('var fs = require(\'fs\');');
86-
}
75+
var url = this.source.url;
8776

88-
if(!simpleRequest) code.push(null);
77+
this.source.cookies.map(function (cookie) {
78+
code.push(util.format('jar.setCookie(request.cookie("%s=%s"), "%s");', encodeURIComponent(cookie.name), encodeURIComponent(cookie.value), url));
79+
});
80+
code.push(null);
81+
}
8982

90-
var options = !simpleRequest ? util.format('var options = %s;', JSON.stringify(reqOpts, null, opts.indent)) : null;
91-
fsReplace.forEach(function(fsToReplace) {
92-
options = options.replace('"' + fsToReplace + '"', fsToReplace);
93-
})
9483

95-
if(!simpleRequest) code.push(options);
84+
if (includeFS) {
85+
code.push('var fs = require("fs");');
86+
}
9687

97-
code.push(null);
98-
var requestLine = 'request.';
99-
requestLine += this.source.method === 'DELETE' ? 'del(' : this.source.method.toLowerCase() + '(';
100-
requestLine += simpleRequest ? '\'' + this.source.fullUrl + '\'' : 'options';
101-
requestLine += ', function(error, response, body){';
102-
code.push(requestLine);
103-
code.push(opts.indent + 'if(error) throw new Error(error);');
88+
var content = JSON.stringify(reqOpts, null, opts.indent)
89+
.replace('"JAR"', 'jar')
90+
.replace(/"fs\.createReadStream\(\\\"(.+)\\\"\)\"/, 'fs.createReadStream("$1")');
10491

92+
code.push(util.format('request(%s, %s', content, 'function (error, response, body) {'));
93+
code.push(opts.indent + 'if (error) throw new Error(error);');
10594
code.push(null);
106-
95+
code.push(opts.indent + 'console.log(body);');
10796
code.push('});');
108-
10997
code.push(null);
11098

11199
return code.join('\n');
112100
};
113101

114102
module.exports.info = {
115103
key: 'request',
116-
title: 'request',
104+
title: 'Request',
117105
link: 'https://github.com/request/request',
118106
description: 'Simplified HTTP request client'
119107
};

‎test/fixtures/available-targets.json‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@
3434
},
3535
{
3636
"key": "request",
37-
"title": "request",
37+
"title": "Request",
3838
"link": "https://github.com/request/request",
3939
"description": "Simplified HTTP request client"
4040
}
Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,18 @@
1-
var request = require('request');
1+
var request = require("request");
22

3-
var options = {
3+
request({
4+
"method": "POST",
45
"url": "http://mockbin.com/har",
56
"headers": {
67
"Content-Type": "application/x-www-form-urlencoded"
78
},
8-
"formData": {
9+
"form": {
910
"foo": "bar",
1011
"hello": "world"
1112
}
12-
};
13-
14-
request.post(options, function(error, response, body){
15-
if(error) throw new Error(error);
13+
}, function (error, response, body) {
14+
if (error) throw new Error(error);
1615

16+
console.log(body);
1717
});
1818

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,18 @@
1-
var request = require('request');
1+
var request = require("request");
22

3-
var options = {
3+
request({
4+
"method": "POST",
45
"url": "http://mockbin.com/har",
56
"headers": {
67
"Content-Type": "application/json"
78
},
9+
"body": {
10+
"foo": "bar"
11+
},
812
"json": true
9-
};
10-
11-
request.post(options, function(error, response, body){
12-
if(error) throw new Error(error);
13+
}, function (error, response, body) {
14+
if (error) throw new Error(error);
1315

16+
console.log(body);
1417
});
1518

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,17 @@
1-
var request = require('request');
1+
var request = require("request");
22

3-
var options = {
4-
"url": "http://mockbin.com/har",
5-
"headers": {
6-
"Cookie": "foo=bar; bar=baz"
7-
}
8-
};
93

10-
request.post(options, function(error, response, body){
11-
if(error) throw new Error(error);
4+
var jar = request.jar();
5+
jar.setCookie(request.cookie("foo=bar"), "http://mockbin.com/har");
6+
jar.setCookie(request.cookie("bar=baz"), "http://mockbin.com/har");
7+
8+
request({
9+
"method": "POST",
10+
"url": "http://mockbin.com/har",
11+
"jar": jar
12+
}, function (error, response, body) {
13+
if (error) throw new Error(error);
1214

15+
console.log(body);
1316
});
1417

Lines changed: 23 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,31 @@
1-
var request = require('request');
1+
var request = require("request");
22

3-
var options = {
4-
"url": "http://mockbin.com/har?baz=abc&foo=bar&foo=baz",
3+
4+
var jar = request.jar();
5+
jar.setCookie(request.cookie("foo=bar"), "http://mockbin.com/har");
6+
jar.setCookie(request.cookie("bar=baz"), "http://mockbin.com/har");
7+
8+
request({
9+
"method": "POST",
10+
"url": "http://mockbin.com/har",
11+
"qs": {
12+
"baz": "abc",
13+
"foo": [
14+
"bar",
15+
"baz"
16+
]
17+
},
518
"headers": {
619
"Accept": "application/json",
7-
"Content-Type": "application/x-www-form-urlencoded",
8-
"Cookie": "foo=bar; bar=baz"
20+
"Content-Type": "application/x-www-form-urlencoded"
921
},
10-
"formData": {
22+
"form": {
1123
"foo": "bar"
12-
}
13-
};
14-
15-
request.post(options, function(error, response, body){
16-
if(error) throw new Error(error);
24+
},
25+
"jar": jar
26+
}, function (error, response, body) {
27+
if (error) throw new Error(error);
1728

29+
console.log(body);
1830
});
1931

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,15 @@
1-
var request = require('request');
1+
var request = require("request");
22

3-
var options = {
3+
request({
4+
"method": "GET",
45
"url": "http://mockbin.com/har",
56
"headers": {
67
"Accept": "application/json",
78
"X-Foo": "Bar"
89
}
9-
};
10-
11-
request.get(options, function(error, response, body){
12-
if(error) throw new Error(error);
10+
}, function (error, response, body) {
11+
if (error) throw new Error(error);
1312

13+
console.log(body);
1414
});
1515

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
var request = require("request");
2+
3+
request({
4+
"method": "POST",
5+
"url": "http://mockbin.com/har",
6+
"headers": {
7+
"Content-Type": "multipart/form-data"
8+
},
9+
"formData": {
10+
"foo": {
11+
"value": "Hello World",
12+
"options": {
13+
"filename": "hello.txt",
14+
"contentType": "text/plain"
15+
}
16+
}
17+
}
18+
}, function (error, response, body) {
19+
if (error) throw new Error(error);
20+
21+
console.log(body);
22+
});
23+
Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,24 @@
1-
var request = require('request');
1+
var request = require("request");
22

3-
var options = {
3+
var fs = require("fs");
4+
request({
5+
"method": "POST",
46
"url": "http://mockbin.com/har",
57
"headers": {
68
"Content-Type": "multipart/form-data"
79
},
810
"formData": {
911
"foo": {
10-
"value": "Hello World",
12+
"value": fs.createReadStream("test/fixtures/files/hello.txt"),
1113
"options": {
1214
"filename": "hello.txt",
13-
"content-type": "text/plain"
15+
"contentType": "text/plain"
1416
}
1517
}
1618
}
17-
};
18-
19-
request.post(options, function(error, response, body){
20-
if(error) throw new Error(error);
19+
}, function (error, response, body) {
20+
if (error) throw new Error(error);
2121

22+
console.log(body);
2223
});
2324

0 commit comments

Comments
 (0)