UNPKG

1.77 kBJavaScriptView Raw
1/**
2 * Module dependencies
3 */
4
5var Stream = require('stream');
6var Connection = require('./connection');
7var Response = require('./response');
8var inherits = require('util').inherits;
9var QS = require('qs');
10
11module.exports = Request;
12
13function 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}
23inherits(Request, Stream);
24
25Request.prototype.setHeader = function (key, value) {
26 this._headers[key.toLowerCase()] = value;
27 return this;
28};
29
30Request.prototype.getHeader = function (key) {
31 return this._headers[key.toLowerCase()];
32};
33
34Request.prototype.removeHeader = function (key) {
35 delete this._headers[key.toLowerCase()];
36 return this;
37};
38
39Request.prototype.write = function (s) {
40 this.body.push(s);
41 return this;
42};
43
44Request.prototype.destroy = function (s) {
45 // TODO
46 this.emit('close');
47};
48
49Request.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
61function 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}