1 |
|
2 |
|
3 |
|
4 |
|
5 | var Stream = require('stream');
|
6 | var Connection = require('./connection');
|
7 | var Response = require('./response');
|
8 | var inherits = require('util').inherits;
|
9 | var QS = require('qs');
|
10 |
|
11 | module.exports = Request;
|
12 |
|
13 | function Request(params, WS, cache) {
|
14 | var self = this;
|
15 | self.writable = true;
|
16 | self.method = params.method || 'GET';
|
17 | self.path = params.pathname || '/';
|
18 | self._headers = {};
|
19 | self.query = params.query ? QS.parse(params.query) : {};
|
20 | self.body = [];
|
21 | self.socket = Connection.open(params, WS, cache);
|
22 | }
|
23 | inherits(Request, Stream);
|
24 |
|
25 | Request.prototype.setHeader = function (key, value) {
|
26 | this._headers[key.toLowerCase()] = value;
|
27 | return this;
|
28 | };
|
29 |
|
30 | Request.prototype.getHeader = function (key) {
|
31 | return this._headers[key.toLowerCase()];
|
32 | };
|
33 |
|
34 | Request.prototype.removeHeader = function (key) {
|
35 | delete this._headers[key.toLowerCase()];
|
36 | return this;
|
37 | };
|
38 |
|
39 | Request.prototype.write = function (s) {
|
40 | this.body.push(s);
|
41 | return this;
|
42 | };
|
43 |
|
44 | Request.prototype.destroy = function (s) {
|
45 |
|
46 | this.emit('close');
|
47 | };
|
48 |
|
49 | Request.prototype.end = function(s) {
|
50 | var self = this;
|
51 | if (typeof s !== 'undefined') self.body.push(s);
|
52 |
|
53 | var req = self.socket.send(self.method, self.path, self._headers, self.query, mergeBody(self.body));
|
54 | var res = new Response(req);
|
55 | res.on('close', function() {self.emit('close');});
|
56 | res.on('ready', function() {self.emit('response', res);});
|
57 | res.on('error', function() {self.emit('error');});
|
58 | return this;
|
59 | };
|
60 |
|
61 | function mergeBody(body) {
|
62 | if (body.length === 0) return null;
|
63 | if (body.length === 1) return body[0];
|
64 | var obj = {};
|
65 | for (var i = 0; i < body.length; i++) {
|
66 | for (var k in body[i]) {
|
67 | if (body[i].hasOwnProperty(k)) obj[k] = body[i][k];
|
68 | }
|
69 | }
|
70 | return obj;
|
71 | }
|