-
Notifications
You must be signed in to change notification settings - Fork 6
Expand file tree
/
Copy pathindex.js
More file actions
67 lines (51 loc) · 1.85 KB
/
index.js
File metadata and controls
67 lines (51 loc) · 1.85 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
"use strict";
var url = require('url');
var FakeRequest = require('./lib/FakeRequest');
var FakeResponse = require('./lib/FakeResponse');
module.exports = function expressBatch(app, options) {
options = options || {};
return function (req, res) {
var results = {};
var requests = {};
// Attempt to parse the req.url object
var query = url.parse(req.url).query;
// If the separator option exists and the request URL can be parsed, parse any nested field-value pairs
if (options.separator && query) {
query = decodeURIComponent(query);
var queriesWithPairs = query.split(options.separator);
queriesWithPairs.forEach(function(query, i) {
requests[query.substring(0,query.indexOf('='))] = query.substring(query.indexOf('=')+1);
});
}
// Otherwise, use the req.query object as-is
else {
requests = req.query;
}
var requestCount = Object.keys(requests).length;
var finishedRequests = 0;
if (requestCount === 0) {
return res.jsonp(results);
}
for (var key in requests) {
results[key] = {};
var request = requests[key];
var fakeReq = new FakeRequest(request, req.headers);
var fakeRes = new FakeResponse(results[key], options);
fakeRes.once('end', done);
app(fakeReq, fakeRes, finalHandler(fakeRes));
}
function finalHandler(fakeRes) {
return function (err) {
if (err) {
return fakeRes.sendStatus(500);
}
fakeRes.sendStatus(404);
};
}
function done() {
if (++finishedRequests >= requestCount) {
res.jsonp(results);
}
}
};
};