Skip to content

Commit 10fe874

Browse files
committed
Removed direct dependence on http module
1 parent c8d9223 commit 10fe874

File tree

5 files changed

+59
-16
lines changed

5 files changed

+59
-16
lines changed

lib/application.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -599,8 +599,8 @@ app.render = function render(name, options, callback) {
599599
*/
600600

601601
app.listen = function listen() {
602-
var server = http.createServer(this);
603-
return server.listen.apply(server, arguments);
602+
var server = this.createServer(this)
603+
return server.listen.apply(server, arguments)
604604
};
605605

606606
/**

lib/express.js

Lines changed: 36 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,36 @@
1414

1515
var EventEmitter = require('events').EventEmitter;
1616
var mixin = require('merge-descriptors');
17+
var setPrototypeOf = require('setprototypeof')
1718
var proto = require('./application');
1819
var Router = require('router');
1920
var req = require('./request');
2021
var res = require('./response');
2122

23+
/**
24+
* Only reqire http when requested
25+
*/
26+
var http = {};
27+
var _http;
28+
Object.defineProperty(http, 'IncomingMessage', {
29+
get: function () {
30+
_http = _http || require('http')
31+
return _http.IncomingMessage
32+
}
33+
});
34+
Object.defineProperty(http, 'ServerResponse', {
35+
get: function () {
36+
_http = _http || require('http')
37+
return _http.ServerResponse
38+
}
39+
});
40+
Object.defineProperty(http, 'createServer', {
41+
get: function () {
42+
_http = _http || require('http')
43+
return _http.createServer
44+
}
45+
});
46+
2247
/**
2348
* Expose `createApplication()`.
2449
*/
@@ -32,16 +57,22 @@ exports = module.exports = createApplication;
3257
* @api public
3358
*/
3459

35-
function createApplication() {
60+
function createApplication(opts) {
61+
opts = opts || {}
62+
opts.reqProto = opts.reqProto || http.IncomingMessage.prototype
63+
opts.resProto = opts.resProto || http.ServerResponse.prototype
64+
opts.createServer = opts.createServer || http.createServer
65+
3666
var app = function(req, res, next) {
3767
app.handle(req, res, next);
3868
};
3969

4070
mixin(app, EventEmitter.prototype, false);
4171
mixin(app, proto, false);
4272

43-
app.request = { __proto__: req, app: app };
44-
app.response = { __proto__: res, app: app };
73+
app.createServer = opts.createServer
74+
app.request = setPrototypeOf({ app: app }, req(opts.reqProto))
75+
app.response = setPrototypeOf({ app: app }, res(opts.resProto))
4576
app.init();
4677
return app;
4778
}
@@ -51,8 +82,8 @@ function createApplication() {
5182
*/
5283

5384
exports.application = proto;
54-
exports.request = req;
55-
exports.response = res;
85+
exports.request = req.proto
86+
exports.response = res.proto
5687

5788
/**
5889
* Expose constructors.

lib/request.js

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,19 +16,24 @@
1616
var accepts = require('accepts');
1717
var isIP = require('net').isIP;
1818
var typeis = require('type-is');
19-
var http = require('http');
2019
var fresh = require('fresh');
2120
var parseRange = require('range-parser');
2221
var parse = require('parseurl');
2322
var proxyaddr = require('proxy-addr');
23+
var setPrototypeOf = require('setprototypeof')
24+
25+
/**
26+
* Export with proto
27+
*/
28+
exports = module.exports = function (proto) {
29+
return setPrototypeOf(req, proto)
30+
}
2431

2532
/**
2633
* Request prototype.
2734
*/
2835

29-
var req = exports = module.exports = {
30-
__proto__: http.IncomingMessage.prototype
31-
};
36+
var req = module.exports.proto = {}
3237

3338
/**
3439
* Return request header.

lib/response.js

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@ var contentDisposition = require('content-disposition');
1616
var deprecate = require('depd')('express');
1717
var encodeUrl = require('encodeurl');
1818
var escapeHtml = require('escape-html');
19-
var http = require('http');
2019
var onFinished = require('on-finished');
2120
var path = require('path');
2221
var pathIsAbsolute = require('path-is-absolute');
@@ -25,21 +24,27 @@ var sign = require('cookie-signature').sign;
2524
var normalizeType = require('./utils').normalizeType;
2625
var normalizeTypes = require('./utils').normalizeTypes;
2726
var setCharset = require('./utils').setCharset;
28-
var statusCodes = http.STATUS_CODES;
27+
var statusCodes = require('statuses/codes')
2928
var cookie = require('cookie');
3029
var send = require('send');
3130
var extname = path.extname;
3231
var mime = send.mime;
3332
var resolve = path.resolve;
3433
var vary = require('vary');
34+
var setPrototypeOf = require('setprototypeof')
35+
36+
/**
37+
* Export with proto
38+
*/
39+
exports = module.exports = function (proto) {
40+
return setPrototypeOf(res, proto)
41+
}
3542

3643
/**
3744
* Response prototype.
3845
*/
3946

40-
var res = module.exports = {
41-
__proto__: http.ServerResponse.prototype
42-
};
47+
var res = module.exports.proto = {}
4348

4449
/**
4550
* Module variables.

package.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,8 @@
5252
"router": "~1.1.5",
5353
"send": "0.14.2",
5454
"serve-static": "~1.11.2",
55+
"setprototypeof": "~1.0.3",
56+
"statuses": "^1.3.1",
5557
"type-is": "~1.6.14",
5658
"utils-merge": "1.0.0",
5759
"vary": "~1.1.0"

0 commit comments

Comments
 (0)