[Pkg-javascript-commits] [node-connect] 01/03: Imported Upstream version 3.4.1

Thorsten Alteholz alteholz at moszumanska.debian.org
Sun Mar 27 20:59:47 UTC 2016


This is an automated email from the git hooks/post-receive script.

alteholz pushed a commit to branch master
in repository node-connect.

commit f70a9fbb20c5b6f4a8f7da74a70deefde827be5f
Author: Thorsten Alteholz <debian at alteholz.de>
Date:   Sun Mar 27 19:46:34 2016 +0200

    Imported Upstream version 3.4.1
---
 .gitignore       |  17 ++
 .npmignore       |   4 -
 .travis.yml      |  18 +-
 History.md       | 528 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
 LICENSE          |   1 +
 Readme.md        | 171 ++++++++++++------
 index.js         | 283 ++++++++++++++++++++++++++++-
 lib/connect.js   |  34 ----
 lib/proto.js     | 226 ------------------------
 package.json     |  21 ++-
 test/fqdn.js     |  12 +-
 test/mounting.js |  20 +--
 test/server.js   |  99 +++++++++--
 13 files changed, 1074 insertions(+), 360 deletions(-)

diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..b83e672
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,17 @@
+coverage/
+.DS_Store
+pids
+logs
+results
+*.pid
+*.gz
+*.log
+test/fixtures/foo.bar.baz.css
+test/fixtures/style.css
+test/fixtures/script.js
+test.js
+docs/*.html
+docs/*.json
+node_modules
+.idea
+*.iml
diff --git a/.npmignore b/.npmignore
deleted file mode 100644
index 078c11e..0000000
--- a/.npmignore
+++ /dev/null
@@ -1,4 +0,0 @@
-coverage/
-docs/
-test/
-.travis.yml
diff --git a/.travis.yml b/.travis.yml
index 73568f2..23358de 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -1,10 +1,14 @@
 language: node_js
 node_js:
   - "0.10"
-  - "0.11"
-matrix:
-  allow_failures:
-    - node_js: "0.11"
-  fast_finish: true
-script: "npm run-script test-travis"
-after_script: "npm install coveralls at 2.10.0 && cat ./coverage/lcov.info | coveralls"
+  - "0.12"
+  - "1.8"
+  - "2.5"
+  - "3.3"
+  - "4.2"
+  - "5.5"
+sudo: false
+script:
+  - "npm run-script test-travis"
+after_script:
+  - "npm install coveralls at 2 && cat ./coverage/lcov.info | coveralls"
diff --git a/History.md b/History.md
index 54ff075..ade42d6 100644
--- a/History.md
+++ b/History.md
@@ -1,3 +1,61 @@
+3.4.1 / 2016-01-23
+==================
+
+  * deps: finalhandler at 0.4.1
+    - deps: escape-html@~1.0.3
+  * deps: parseurl@~1.3.1
+    - perf: enable strict mode
+
+3.4.0 / 2015-06-18
+==================
+
+  * deps: debug@~2.2.0
+    - deps: ms at 0.7.1
+  * deps: finalhandler at 0.4.0
+    - Fix a false-positive when unpiping in Node.js 0.8
+    - Support `statusCode` property on `Error` objects
+    - Use `unpipe` module for unpiping requests
+    - deps: debug@~2.2.0
+    - deps: escape-html at 1.0.2
+    - deps: on-finished@~2.3.0
+    - perf: enable strict mode
+    - perf: remove argument reassignment
+  * perf: enable strict mode
+  * perf: remove argument reassignments
+
+3.3.5 / 2015-03-16
+==================
+
+  * deps: debug@~2.1.3
+    - Fix high intensity foreground color for bold
+    - deps: ms at 0.7.0
+  * deps: finalhandler at 0.3.4
+    - deps: debug@~2.1.3
+
+3.3.4 / 2015-01-07
+==================
+
+  * deps: debug@~2.1.1
+  * deps: finalhandler at 0.3.3
+    - deps: debug@~2.1.1
+    - deps: on-finished@~2.2.0
+
+3.3.3 / 2014-11-09
+==================
+
+  * Correctly invoke async callback asynchronously
+
+3.3.2 / 2014-10-28
+==================
+
+  * Fix handling of URLs containing `://` in the path
+
+3.3.1 / 2014-10-22
+==================
+
+  * deps: finalhandler at 0.3.2
+    - deps: on-finished@~2.1.1
+
 3.3.0 / 2014-10-17
 ==================
 
@@ -74,6 +132,476 @@
   * remove various private `connect.utils` functions
   * drop node.js 0.8 support
 
+2.30.2 / 2015-07-31
+===================
+
+  * deps: body-parser@~1.13.3
+    - deps: type-is@~1.6.6
+  * deps: compression@~1.5.2
+    - deps: accepts@~1.2.12
+    - deps: compressible@~2.0.5
+    - deps: vary@~1.0.1
+  * deps: errorhandler@~1.4.2
+    - deps: accepts@~1.2.12
+  * deps: method-override@~2.3.5
+    - deps: vary@~1.0.1
+    - perf: enable strict mode
+  * deps: serve-index@~1.7.2
+    - deps: accepts@~1.2.12
+    - deps: mime-types@~2.1.4
+  * deps: type-is@~1.6.6
+    - deps: mime-types@~2.1.4
+  * deps: vhost@~3.0.1
+    - perf: enable strict mode
+
+2.30.1 / 2015-07-05
+===================
+
+  * deps: body-parser@~1.13.2
+    - deps: iconv-lite at 0.4.11
+    - deps: qs at 4.0.0
+    - deps: raw-body@~2.1.2
+    - deps: type-is@~1.6.4
+  * deps: compression@~1.5.1
+    - deps: accepts@~1.2.10
+    - deps: compressible@~2.0.4
+  * deps: errorhandler@~1.4.1
+    - deps: accepts@~1.2.10
+  * deps: qs at 4.0.0
+    - Fix dropping parameters like `hasOwnProperty`
+    - Fix various parsing edge cases
+  * deps: morgan@~1.6.1
+    - deps: basic-auth@~1.0.3
+  * deps: pause at 0.1.0
+    - Re-emit events with all original arguments
+    - Refactor internals
+    - perf: enable strict mode
+  * deps: serve-index@~1.7.1
+    - deps: accepts@~1.2.10
+    - deps: mime-types@~2.1.2
+  * deps: type-is@~1.6.4
+    - deps: mime-types@~2.1.2
+    - perf: enable strict mode
+    - perf: remove argument reassignment
+
+2.30.0 / 2015-06-18
+===================
+
+  * deps: body-parser@~1.13.1
+    - Add `statusCode` property on `Error`s, in addition to `status`
+    - Change `type` default to `application/json` for JSON parser
+    - Change `type` default to `application/x-www-form-urlencoded` for urlencoded parser
+    - Provide static `require` analysis
+    - Use the `http-errors` module to generate errors
+    - deps: bytes at 2.1.0
+    - deps: iconv-lite at 0.4.10
+    - deps: on-finished@~2.3.0
+    - deps: raw-body@~2.1.1
+    - deps: type-is@~1.6.3
+    - perf: enable strict mode
+    - perf: remove argument reassignment
+    - perf: remove delete call
+  * deps: bytes at 2.1.0
+    - Slight optimizations
+    - Units no longer case sensitive when parsing
+  * deps: compression@~1.5.0
+    - Fix return value from `.end` and `.write` after end
+    - Improve detection of zero-length body without `Content-Length`
+    - deps: accepts@~1.2.9
+    - deps: bytes at 2.1.0
+    - deps: compressible@~2.0.3
+    - perf: enable strict mode
+    - perf: remove flush reassignment
+    - perf: simplify threshold detection
+  * deps: cookie at 0.1.3
+    - Slight optimizations
+  * deps: cookie-parser@~1.3.5
+    - deps: cookie at 0.1.3
+  * deps: csurf@~1.8.3
+    - Add `sessionKey` option
+    - deps: cookie at 0.1.3
+    - deps: csrf@~3.0.0
+  * deps: errorhandler@~1.4.0
+    - Add charset to the `Content-Type` header
+    - Support `statusCode` property on `Error` objects
+    - deps: accepts@~1.2.9
+    - deps: escape-html at 1.0.2
+  * deps: express-session@~1.11.3
+    - Support an array in `secret` option for key rotation
+    - deps: cookie at 0.1.3
+    - deps: crc at 3.3.0
+    - deps: debug@~2.2.0
+    - deps: depd@~1.0.1
+    - deps: uid-safe@~2.0.0
+  * deps: finalhandler at 0.4.0
+    - Fix a false-positive when unpiping in Node.js 0.8
+    - Support `statusCode` property on `Error` objects
+    - Use `unpipe` module for unpiping requests
+    - deps: escape-html at 1.0.2
+    - deps: on-finished@~2.3.0
+    - perf: enable strict mode
+    - perf: remove argument reassignment
+  * deps: fresh at 0.3.0
+    - Add weak `ETag` matching support
+  * deps: morgan@~1.6.0
+    - Add `morgan.compile(format)` export
+    - Do not color 1xx status codes in `dev` format
+    - Fix `response-time` token to not include response latency
+    - Fix `status` token incorrectly displaying before response in `dev` format
+    - Fix token return values to be `undefined` or a string
+    - Improve representation of multiple headers in `req` and `res` tokens
+    - Use `res.getHeader` in `res` token
+    - deps: basic-auth@~1.0.2
+    - deps: on-finished@~2.3.0
+    - pref: enable strict mode
+    - pref: reduce function closure scopes
+    - pref: remove dynamic compile on every request for `dev` format
+    - pref: remove an argument reassignment
+    - pref: skip function call without `skip` option
+  * deps: serve-favicon@~2.3.0
+    - Send non-chunked response for `OPTIONS`
+    - deps: etag@~1.7.0
+    - deps: fresh at 0.3.0
+    - perf: enable strict mode
+    - perf: remove argument reassignment
+    - perf: remove bitwise operations
+  * deps: serve-index@~1.7.0
+    - Accept `function` value for `template` option
+    - Send non-chunked response for `OPTIONS`
+    - Stat parent directory when necessary
+    - Use `Date.prototype.toLocaleDateString` to format date
+    - deps: accepts@~1.2.9
+    - deps: escape-html at 1.0.2
+    - deps: mime-types@~2.1.1
+    - perf: enable strict mode
+    - perf: remove argument reassignment
+  * deps: serve-static@~1.10.0
+    - Add `fallthrough` option
+    - Fix reading options from options prototype
+    - Improve the default redirect response headers
+    - Malformed URLs now `next()` instead of 400
+    - deps: escape-html at 1.0.2
+    - deps: send at 0.13.0
+    - perf: enable strict mode
+    - perf: remove argument reassignment
+  * deps: type-is@~1.6.3
+    - deps: mime-types@~2.1.1
+    - perf: reduce try block size
+    - perf: remove bitwise operations
+
+2.29.2 / 2015-05-14
+===================
+
+  * deps: body-parser@~1.12.4
+    - Slight efficiency improvement when not debugging
+    - deps: debug@~2.2.0
+    - deps: depd@~1.0.1
+    - deps: iconv-lite at 0.4.8
+    - deps: on-finished@~2.2.1
+    - deps: qs at 2.4.2
+    - deps: raw-body@~2.0.1
+    - deps: type-is@~1.6.2
+  * deps: compression@~1.4.4
+    - deps: accepts@~1.2.7
+    - deps: debug@~2.2.0
+  * deps: connect-timeout@~1.6.2
+    - deps: debug@~2.2.0
+    - deps: ms at 0.7.1
+  * deps: debug@~2.2.0
+    - deps: ms at 0.7.1
+  * deps: depd@~1.0.1
+  * deps: errorhandler@~1.3.6
+    - deps: accepts@~1.2.7
+  * deps: finalhandler at 0.3.6
+    - deps: debug@~2.2.0
+    - deps: on-finished@~2.2.1
+  * deps: method-override@~2.3.3
+    - deps: debug@~2.2.0
+  * deps: morgan@~1.5.3
+    - deps: basic-auth@~1.0.1
+    - deps: debug@~2.2.0
+    - deps: depd@~1.0.1
+    - deps: on-finished@~2.2.1
+  * deps: qs at 2.4.2
+   - Fix allowing parameters like `constructor`
+  * deps: response-time@~2.3.1
+    - deps: depd@~1.0.1
+  * deps: serve-favicon@~2.2.1
+    - deps: etag@~1.6.0
+    - deps: ms at 0.7.1
+  * deps: serve-index@~1.6.4
+    - deps: accepts@~1.2.7
+    - deps: debug@~2.2.0
+    - deps: mime-types@~2.0.11
+  * deps: serve-static@~1.9.3
+    - deps: send at 0.12.3
+  * deps: type-is@~1.6.2
+    - deps: mime-types@~2.0.11
+
+2.29.1 / 2015-03-16
+===================
+
+  * deps: body-parser@~1.12.2
+    - deps: debug@~2.1.3
+    - deps: qs at 2.4.1
+    - deps: type-is@~1.6.1
+  * deps: compression@~1.4.3
+    - Fix error when code calls `res.end(str, encoding)`
+    - deps: accepts@~1.2.5
+    - deps: debug@~2.1.3
+  * deps: connect-timeout@~1.6.1
+    - deps: debug@~2.1.3
+  * deps: debug@~2.1.3
+    - Fix high intensity foreground color for bold
+    - deps: ms at 0.7.0
+  * deps: errorhandler@~1.3.5
+    - deps: accepts@~1.2.5
+  * deps: express-session@~1.10.4
+    - deps: debug@~2.1.3
+  * deps: finalhandler at 0.3.4
+    - deps: debug@~2.1.3
+  * deps: method-override@~2.3.2
+    - deps: debug@~2.1.3
+  * deps: morgan@~1.5.2
+    - deps: debug@~2.1.3
+  * deps: qs at 2.4.1
+    - Fix error when parameter `hasOwnProperty` is present
+  * deps: serve-index@~1.6.3
+    - Properly escape file names in HTML
+    - deps: accepts@~1.2.5
+    - deps: debug@~2.1.3
+    - deps: escape-html at 1.0.1
+    - deps: mime-types@~2.0.10
+  * deps: serve-static@~1.9.2
+    - deps: send at 0.12.2
+  * deps: type-is@~1.6.1
+    - deps: mime-types@~2.0.10
+
+2.29.0 / 2015-02-17
+===================
+
+  * Use `content-type` to parse `Content-Type` headers
+  * deps: body-parser@~1.12.0
+    - add `debug` messages
+    - accept a function for the `type` option
+    - make internal `extended: true` depth limit infinity
+    - use `content-type` to parse `Content-Type` headers
+    - deps: iconv-lite at 0.4.7
+    - deps: raw-body at 1.3.3
+    - deps: type-is@~1.6.0
+  * deps: compression@~1.4.1
+    - Prefer `gzip` over `deflate` on the server
+    - deps: accepts@~1.2.4
+  * deps: connect-timeout@~1.6.0
+    - deps: http-errors@~1.3.1
+  * deps: cookie-parser@~1.3.4
+    - deps: cookie-signature at 1.0.6
+  * deps: cookie-signature at 1.0.6
+  * deps: csurf@~1.7.0
+    - Accept `CSRF-Token` and `XSRF-Token` request headers
+    - Default `cookie.path` to `'/'`, if using cookies
+    - deps: cookie-signature at 1.0.6
+    - deps: csrf@~2.0.6
+    - deps: http-errors@~1.3.1
+  * deps: errorhandler@~1.3.4
+    - deps: accepts@~1.2.4
+  * deps: express-session@~1.10.3
+    - deps: cookie-signature at 1.0.6
+    - deps: uid-safe at 1.1.0
+  * deps: http-errors@~1.3.1
+    - Construct errors using defined constructors from `createError`
+    - Fix error names that are not identifiers
+    - Set a meaningful `name` property on constructed errors
+  * deps: response-time@~2.3.0
+    - Add function argument to support recording of response time
+  * deps: serve-index@~1.6.2
+    - deps: accepts@~1.2.4
+    - deps: http-errors@~1.3.1
+    - deps: mime-types@~2.0.9
+  * deps: serve-static@~1.9.1
+    - deps: send at 0.12.1
+  * deps: type-is@~1.6.0
+    - fix argument reassignment
+    - fix false-positives in `hasBody` `Transfer-Encoding` check
+    - support wildcard for both type and subtype (`*/*`)
+    - deps: mime-types@~2.0.9
+
+2.28.3 / 2015-01-31
+===================
+
+  * deps: compression@~1.3.1
+    - deps: accepts@~1.2.3
+    - deps: compressible@~2.0.2
+  * deps: csurf@~1.6.6
+    - deps: csrf@~2.0.5
+  * deps: errorhandler@~1.3.3
+    - deps: accepts@~1.2.3
+  * deps: express-session@~1.10.2
+    - deps: uid-safe at 1.0.3
+  * deps: serve-index@~1.6.1
+    - deps: accepts@~1.2.3
+    - deps: mime-types@~2.0.8
+  * deps: type-is@~1.5.6
+    - deps: mime-types@~2.0.8
+
+2.28.2 / 2015-01-20
+===================
+
+  * deps: body-parser@~1.10.2
+    - deps: iconv-lite at 0.4.6
+    - deps: raw-body at 1.3.2
+  * deps: serve-static@~1.8.1
+    - Fix redirect loop in Node.js 0.11.14
+    - Fix root path disclosure
+    - deps: send at 0.11.1
+
+2.28.1 / 2015-01-08
+===================
+
+  * deps: csurf@~1.6.5
+    - deps: csrf@~2.0.4
+  * deps: express-session@~1.10.1
+    - deps: uid-safe@~1.0.2
+
+2.28.0 / 2015-01-05
+===================
+
+  * deps: body-parser@~1.10.1
+    - Make internal `extended: true` array limit dynamic
+    - deps: on-finished@~2.2.0
+    - deps: type-is@~1.5.5
+  * deps: compression@~1.3.0
+    - Export the default `filter` function for wrapping
+    - deps: accepts@~1.2.2
+    - deps: debug@~2.1.1
+  * deps: connect-timeout@~1.5.0
+    - deps: debug@~2.1.1
+    - deps: http-errors@~1.2.8
+    - deps: ms at 0.7.0
+  * deps: csurf@~1.6.4
+    - deps: csrf@~2.0.3
+    - deps: http-errors@~1.2.8
+  * deps: debug@~2.1.1
+  * deps: errorhandler@~1.3.2
+    - Add `log` option
+    - Fix heading content to not include stack
+    - deps: accepts@~1.2.2
+  * deps: express-session@~1.10.0
+    - Add `store.touch` interface for session stores
+    - Fix `MemoryStore` expiration with `resave: false`
+    - deps: debug@~2.1.1
+  * deps: finalhandler at 0.3.3
+    - deps: debug@~2.1.1
+    - deps: on-finished@~2.2.0
+  * deps: method-override@~2.3.1
+    - deps: debug@~2.1.1
+    - deps: methods@~1.1.1
+  * deps: morgan@~1.5.1
+    - Add multiple date formats `clf`, `iso`, and `web`
+    - Deprecate `buffer` option
+    - Fix date format in `common` and `combined` formats
+    - Fix token arguments to accept values with `"`
+    - deps: debug@~2.1.1
+    - deps: on-finished@~2.2.0
+  * deps: serve-favicon@~2.2.0
+    - Support query string in the URL
+    - deps: etag@~1.5.1
+    - deps: ms at 0.7.0
+  * deps: serve-index@~1.6.0
+    - Add link to root directory
+    - deps: accepts@~1.2.2
+    - deps: batch at 0.5.2
+    - deps: debug@~2.1.1
+    - deps: mime-types@~2.0.7
+  * deps: serve-static@~1.8.0
+    - Fix potential open redirect when mounted at root
+    - deps: send at 0.11.0
+  * deps: type-is@~1.5.5
+    - deps: mime-types@~2.0.7
+
+2.27.6 / 2014-12-10
+===================
+
+  * deps: serve-index@~1.5.3
+    - deps: accepts@~1.1.4
+    - deps: http-errors@~1.2.8
+    - deps: mime-types@~2.0.4
+
+2.27.5 / 2014-12-10
+===================
+
+  * deps: compression@~1.2.2
+    - Fix `.end` to only proxy to `.end`
+    - deps: accepts@~1.1.4
+  * deps: express-session@~1.9.3
+    - Fix error when `req.sessionID` contains a non-string value
+  * deps: http-errors@~1.2.8
+    - Fix stack trace from exported function
+    - Remove `arguments.callee` usage
+  * deps: serve-index@~1.5.2
+    - Fix icon name background alignment on mobile view
+  * deps: type-is@~1.5.4
+    - deps: mime-types@~2.0.4
+
+2.27.4 / 2014-11-23
+===================
+
+  * deps: body-parser@~1.9.3
+    - deps: iconv-lite at 0.4.5
+    - deps: qs at 2.3.3
+    - deps: raw-body at 1.3.1
+    - deps: type-is@~1.5.3
+  * deps: compression@~1.2.1
+    - deps: accepts@~1.1.3
+  * deps: errorhandler@~1.2.3
+    - deps: accepts@~1.1.3
+  * deps: express-session@~1.9.2
+    - deps: crc at 3.2.1
+  * deps: qs at 2.3.3
+    - Fix `arrayLimit` behavior
+  * deps: serve-favicon@~2.1.7
+    - Avoid errors from enumerables on `Object.prototype`
+  * deps: serve-index@~1.5.1
+    - deps: accepts@~1.1.3
+    - deps: mime-types@~2.0.3
+  * deps: type-is@~1.5.3
+    - deps: mime-types@~2.0.3
+
+2.27.3 / 2014-11-09
+===================
+
+  * Correctly invoke async callback asynchronously
+  * deps: csurf@~1.6.3
+    - bump csrf
+    - bump http-errors
+
+2.27.2 / 2014-10-28
+===================
+
+  * Fix handling of URLs containing `://` in the path
+  * deps: body-parser@~1.9.2
+    - deps: qs at 2.3.2
+  * deps: qs at 2.3.2
+    - Fix parsing of mixed objects and values
+
+2.27.1 / 2014-10-22
+===================
+
+  * deps: body-parser@~1.9.1
+    - deps: on-finished@~2.1.1
+    - deps: qs at 2.3.0
+    - deps: type-is@~1.5.2
+  * deps: express-session@~1.9.1
+    - Remove unnecessary empty write call
+  * deps: finalhandler at 0.3.2
+    - deps: on-finished@~2.1.1
+  * deps: morgan@~1.4.1
+    - deps: on-finished@~2.1.1
+  * deps: qs at 2.3.0
+    - Fix parsing of mixed implicit and explicit arrays
+  * deps: serve-static@~1.7.1
+    - deps: send at 0.10.1
+
 2.27.0 / 2014-10-16
 ===================
 
diff --git a/LICENSE b/LICENSE
index 6dd4c1c..9c27617 100644
--- a/LICENSE
+++ b/LICENSE
@@ -3,6 +3,7 @@
 Copyright (c) 2010 Sencha Inc.
 Copyright (c) 2011 LearnBoost
 Copyright (c) 2011-2014 TJ Holowaychuk
+Copyright (c) 2015 Douglas Christopher Wilson
 
 Permission is hereby granted, free of charge, to any person obtaining
 a copy of this software and associated documentation files (the
diff --git a/Readme.md b/Readme.md
index 530423b..74dc98f 100644
--- a/Readme.md
+++ b/Readme.md
@@ -4,89 +4,158 @@
 [![NPM Downloads][downloads-image]][downloads-url]
 [![Build Status][travis-image]][travis-url]
 [![Test Coverage][coveralls-image]][coveralls-url]
-[![Gittip][gittip-image]][gittip-url]
+[![Gratipay][gratipay-image]][gratipay-url]
 
   Connect is an extensible HTTP server framework for [node](http://nodejs.org) using "plugins" known as _middleware_.
 
 ```js
-var connect = require('connect')
-var http = require('http')
+var connect = require('connect');
+var http = require('http');
 
-var app = connect()
+var app = connect();
 
 // gzip/deflate outgoing responses
-var compression = require('compression')
-app.use(compression())
+var compression = require('compression');
+app.use(compression());
 
 // store session state in browser cookie
-var cookieSession = require('cookie-session')
+var cookieSession = require('cookie-session');
 app.use(cookieSession({
     keys: ['secret1', 'secret2']
-}))
+}));
 
 // parse urlencoded request bodies into req.body
-var bodyParser = require('body-parser')
-app.use(bodyParser.urlencoded())
+var bodyParser = require('body-parser');
+app.use(bodyParser.urlencoded());
 
 // respond to all requests
 app.use(function(req, res){
   res.end('Hello from Connect!\n');
-})
+});
 
 //create node.js http server and listen on port
-http.createServer(app).listen(3000)
+http.createServer(app).listen(3000);
 ```
 
-## Connect 3.0
+## Getting Started
 
-Connect 3.0 is in progress in the `master` branch. The main changes in Connect are:
+Connect is a simple framework to glue together various "middleware" to handle requests.
 
-- Middleware will be moved to their own repositories in the [expressjs](http://github.com/expressjs) organization
-- All node patches will be removed - all middleware _should_ work without Connect and with similar frameworks like [restify](https://github.com/mcavage/node-restify)
-- Node `0.8` is no longer supported
-- The website documentation has been removed - view the markdown readmes instead
+### Install Connect
 
-If you would like to help maintain these middleware, please contact a [member of the expressjs team](https://github.com/orgs/expressjs/people).
+```sh
+$ npm install connect
+```
+
+### Create an app
+
+The main component is a Connect "app". This will store all the middleware
+added and is, itself, a function.
+
+```js
+var app = connect();
+```
+
+### Use middleware
+
+The core of Connect is "using" middleware. Middleware are added as a "stack"
+where incoming requests will execute each middleware one-by-one until a middleware
+does not call `next()` within it.
+
+```js
+app.use(function middleware1(req, res, next) {
+  // middleware 1
+  next();
+});
+app.use(function middleware2(req, res, next) {
+  // middleware 2
+  next();
+});
+```
+
+### Mount middleware
+
+The `.use()` method also takes an optional path string that is matched against
+the beginning of the incoming request URL. This allows for basic routing.
+
+```js
+app.use('/foo', function fooMiddleware(req, res, next) {
+  // req.url starts with "/foo"
+  next();
+});
+app.use('/bar', function barMiddleware(req, res, next) {
+  // req.url starts with "/bar"
+  next();
+});
+```
+
+### Error middleware
+
+There are special cases of "error-handling" middleware. There are middleware
+where the function takes exactly 4 arguments. Errors that occur in the middleware
+added before the error middleware will invoke this middleware when errors occur.
+
+```js
+app.use(function onerror(err, req, res, next) {
+  // an error occurred!
+});
+```
+
+### Create a server from the app
+
+The last step is to actually use the Connect app in a server. The `.listen()` method
+is a convenience to start a HTTP server.
+
+```js
+var server = app.listen(port);
+```
+
+The app itself is really just a function with three arguments, so it can also be handed
+to `.createServer()` in Node.js.
+
+```js
+var server = http.createServer(app);
+```
 
 ## Middleware
 
 These middleware and libraries are officially supported by the Connect/Express team:
 
-  - [body-parser](https://github.com/expressjs/body-parser) - previous `bodyParser`, `json`, and `urlencoded`. You may also be interested in:
-    - [body](https://github.com/raynos/body)
-    - [co-body](https://github.com/visionmedia/co-body)
-    - [raw-body](https://github.com/stream-utils/raw-body)
-  - [compression](https://github.com/expressjs/compression) - previously `compress`
-  - [connect-timeout](https://github.com/expressjs/timeout) - previously `timeout`
-  - [cookie-parser](https://github.com/expressjs/cookie-parser) - previously `cookieParser`
-  - [cookie-session](https://github.com/expressjs/cookie-session) - previously `cookieSession`
-  - [csurf](https://github.com/expressjs/csurf) - previously `csrf`
-  - [errorhandler](https://github.com/expressjs/errorhandler) - previously `error-handler`
-  - [express-session](https://github.com/expressjs/session) - previously `session`
-  - [method-override](https://github.com/expressjs/method-override) - previously `method-override`
-  - [morgan](https://github.com/expressjs/morgan) - previously `logger`
-  - [response-time](https://github.com/expressjs/response-time) - previously `response-time`
-  - [serve-favicon](https://github.com/expressjs/serve-favicon) - previously `favicon`
-  - [serve-index](https://github.com/expressjs/serve-index) - previously `directory`
-  - [serve-static](https://github.com/expressjs/serve-static) - previously `static`
-  - [vhost](https://github.com/expressjs/vhost) - previously `vhost`
+  - [body-parser](https://www.npmjs.com/package/body-parser) - previous `bodyParser`, `json`, and `urlencoded`. You may also be interested in:
+    - [body](https://www.npmjs.com/package/body)
+    - [co-body](https://www.npmjs.com/package/co-body)
+    - [raw-body](https://www.npmjs.com/package/raw-body)
+  - [compression](https://www.npmjs.com/package/compression) - previously `compress`
+  - [connect-timeout](https://www.npmjs.com/package/connect-timeout) - previously `timeout`
+  - [cookie-parser](https://www.npmjs.com/package/cookie-parser) - previously `cookieParser`
+  - [cookie-session](https://www.npmjs.com/package/cookie-session) - previously `cookieSession`
+  - [csurf](https://www.npmjs.com/package/csurf) - previously `csrf`
+  - [errorhandler](https://www.npmjs.com/package/errorhandler) - previously `error-handler`
+  - [express-session](https://www.npmjs.com/package/express-session) - previously `session`
+  - [method-override](https://www.npmjs.com/package/method-override) - previously `method-override`
+  - [morgan](https://www.npmjs.com/package/morgan) - previously `logger`
+  - [response-time](https://www.npmjs.com/package/response-time) - previously `response-time`
+  - [serve-favicon](https://www.npmjs.com/package/serve-favicon) - previously `favicon`
+  - [serve-index](https://www.npmjs.com/package/serve-index) - previously `directory`
+  - [serve-static](https://www.npmjs.com/package/serve-static) - previously `static`
+  - [vhost](https://www.npmjs.com/package/vhost) - previously `vhost`
 
 Most of these are exact ports of their Connect 2.x equivalents. The primary exception is `cookie-session`.
 
 Some middleware previously included with Connect are no longer supported by the Connect/Express team, are replaced by an alternative module, or should be superseded by a better module. Use one of these alternatives instead:
 
   - `cookieParser`
-    - [cookies](https://github.com/jed/cookies) and [keygrip](https://github.com/jed/keygrip)
+    - [cookies](https://www.npmjs.com/package/cookies) and [keygrip](https://www.npmjs.com/package/keygrip)
   - `limit`
-    - [raw-body](https://github.com/stream-utils/raw-body)
+    - [raw-body](https://www.npmjs.com/package/raw-body)
   - `multipart`
-    - [connect-multiparty](https://github.com/superjoe30/connect-multiparty)
-    - [connect-busboy](https://github.com/mscdex/connect-busboy)
+    - [connect-multiparty](https://www.npmjs.com/package/connect-multiparty)
+    - [connect-busboy](https://www.npmjs.com/package/connect-busboy)
   - `query`
-    - [qs](https://github.com/visionmedia/node-querystring)
+    - [qs](https://www.npmjs.com/package/qs)
   - `staticCache`
-    - [st](https://github.com/isaacs/st)
-    - [connect-static](https://github.com/andrewrk/connect-static)
+    - [st](https://www.npmjs.com/package/st)
+    - [connect-static](https://www.npmjs.com/package/connect-static)
 
 Checkout [http-framework](https://github.com/Raynos/http-framework/wiki/Modules) for many other compatible middleware! 
 
@@ -107,19 +176,19 @@ npm test
   - Connect `1.x` - node `0.4`
   - Connect `< 2.8` - node `0.6`
   - Connect `>= 2.8 < 3` - node `0.8`
-  - Connect `>= 3` - node `0.10`
+  - Connect `>= 3` - node `0.10`, `0.12`; io.js `1.x`, `2.x`
 
 ## License
 
 [MIT](LICENSE)
 
-[npm-image]: https://img.shields.io/npm/v/connect.svg?style=flat
+[npm-image]: https://img.shields.io/npm/v/connect.svg
 [npm-url]: https://npmjs.org/package/connect
-[travis-image]: https://img.shields.io/travis/senchalabs/connect.svg?style=flat
+[travis-image]: https://img.shields.io/travis/senchalabs/connect/master.svg
 [travis-url]: https://travis-ci.org/senchalabs/connect
-[coveralls-image]: https://img.shields.io/coveralls/senchalabs/connect.svg?style=flat
+[coveralls-image]: https://img.shields.io/coveralls/senchalabs/connect/master.svg
 [coveralls-url]: https://coveralls.io/r/senchalabs/connect
-[downloads-image]: https://img.shields.io/npm/dm/connect.svg?style=flat
+[downloads-image]: https://img.shields.io/npm/dm/connect.svg
 [downloads-url]: https://npmjs.org/package/connect
-[gittip-image]: https://img.shields.io/gittip/dougwilson.svg?style=flat
-[gittip-url]: https://www.gittip.com/dougwilson/
+[gratipay-image]: https://img.shields.io/gratipay/dougwilson.svg
+[gratipay-url]: https://www.gratipay.com/dougwilson/
diff --git a/index.js b/index.js
index 02befb4..6473a3a 100644
--- a/index.js
+++ b/index.js
@@ -1,2 +1,283 @@
+/*!
+ * connect
+ * Copyright(c) 2010 Sencha Inc.
+ * Copyright(c) 2011 TJ Holowaychuk
+ * Copyright(c) 2015 Douglas Christopher Wilson
+ * MIT Licensed
+ */
 
-module.exports = require('./lib/connect');
+'use strict';
+
+/**
+ * Module dependencies.
+ * @private
+ */
+
+var debug = require('debug')('connect:dispatcher');
+var EventEmitter = require('events').EventEmitter;
+var finalhandler = require('finalhandler');
+var http = require('http');
+var merge = require('utils-merge');
+var parseUrl = require('parseurl');
+
+/**
+ * Module exports.
+ * @public
+ */
+
+module.exports = createServer;
+
+/**
+ * Module variables.
+ * @private
+ */
+
+var env = process.env.NODE_ENV || 'development';
+var proto = {};
+
+/* istanbul ignore next */
+var defer = typeof setImmediate === 'function'
+  ? setImmediate
+  : function(fn){ process.nextTick(fn.bind.apply(fn, arguments)) }
+
+/**
+ * Create a new connect server.
+ *
+ * @return {function}
+ * @public
+ */
+
+function createServer() {
+  function app(req, res, next){ app.handle(req, res, next); }
+  merge(app, proto);
+  merge(app, EventEmitter.prototype);
+  app.route = '/';
+  app.stack = [];
+  return app;
+}
+
+/**
+ * Utilize the given middleware `handle` to the given `route`,
+ * defaulting to _/_. This "route" is the mount-point for the
+ * middleware, when given a value other than _/_ the middleware
+ * is only effective when that segment is present in the request's
+ * pathname.
+ *
+ * For example if we were to mount a function at _/admin_, it would
+ * be invoked on _/admin_, and _/admin/settings_, however it would
+ * not be invoked for _/_, or _/posts_.
+ *
+ * @param {String|Function|Server} route, callback or server
+ * @param {Function|Server} callback or server
+ * @return {Server} for chaining
+ * @public
+ */
+
+proto.use = function use(route, fn) {
+  var handle = fn;
+  var path = route;
+
+  // default route to '/'
+  if (typeof route !== 'string') {
+    handle = route;
+    path = '/';
+  }
+
+  // wrap sub-apps
+  if (typeof handle.handle === 'function') {
+    var server = handle;
+    server.route = path;
+    handle = function (req, res, next) {
+      server.handle(req, res, next);
+    };
+  }
+
+  // wrap vanilla http.Servers
+  if (handle instanceof http.Server) {
+    handle = handle.listeners('request')[0];
+  }
+
+  // strip trailing slash
+  if (path[path.length - 1] === '/') {
+    path = path.slice(0, -1);
+  }
+
+  // add the middleware
+  debug('use %s %s', path || '/', handle.name || 'anonymous');
+  this.stack.push({ route: path, handle: handle });
+
+  return this;
+};
+
+/**
+ * Handle server requests, punting them down
+ * the middleware stack.
+ *
+ * @private
+ */
+
+proto.handle = function handle(req, res, out) {
+  var index = 0;
+  var protohost = getProtohost(req.url) || '';
+  var removed = '';
+  var slashAdded = false;
+  var stack = this.stack;
+
+  // final function handler
+  var done = out || finalhandler(req, res, {
+    env: env,
+    onerror: logerror
+  });
+
+  // store the original URL
+  req.originalUrl = req.originalUrl || req.url;
+
+  function next(err) {
+    if (slashAdded) {
+      req.url = req.url.substr(1);
+      slashAdded = false;
+    }
+
+    if (removed.length !== 0) {
+      req.url = protohost + removed + req.url.substr(protohost.length);
+      removed = '';
+    }
+
+    // next callback
+    var layer = stack[index++];
+
+    // all done
+    if (!layer) {
+      defer(done, err);
+      return;
+    }
+
+    // route data
+    var path = parseUrl(req).pathname || '/';
+    var route = layer.route;
+
+    // skip this layer if the route doesn't match
+    if (path.toLowerCase().substr(0, route.length) !== route.toLowerCase()) {
+      return next(err);
+    }
+
+    // skip if route match does not border "/", ".", or end
+    var c = path[route.length];
+    if (c !== undefined && '/' !== c && '.' !== c) {
+      return next(err);
+    }
+
+    // trim off the part of the url that matches the route
+    if (route.length !== 0 && route !== '/') {
+      removed = route;
+      req.url = protohost + req.url.substr(protohost.length + removed.length);
+
+      // ensure leading slash
+      if (!protohost && req.url[0] !== '/') {
+        req.url = '/' + req.url;
+        slashAdded = true;
+      }
+    }
+
+    // call the layer handle
+    call(layer.handle, route, err, req, res, next);
+  }
+
+  next();
+};
+
+/**
+ * Listen for connections.
+ *
+ * This method takes the same arguments
+ * as node's `http.Server#listen()`.
+ *
+ * HTTP and HTTPS:
+ *
+ * If you run your application both as HTTP
+ * and HTTPS you may wrap them individually,
+ * since your Connect "server" is really just
+ * a JavaScript `Function`.
+ *
+ *      var connect = require('connect')
+ *        , http = require('http')
+ *        , https = require('https');
+ *
+ *      var app = connect();
+ *
+ *      http.createServer(app).listen(80);
+ *      https.createServer(options, app).listen(443);
+ *
+ * @return {http.Server}
+ * @api public
+ */
+
+proto.listen = function listen() {
+  var server = http.createServer(this);
+  return server.listen.apply(server, arguments);
+};
+
+/**
+ * Invoke a route handle.
+ * @private
+ */
+
+function call(handle, route, err, req, res, next) {
+  var arity = handle.length;
+  var error = err;
+  var hasError = Boolean(err);
+
+  debug('%s %s : %s', handle.name || '<anonymous>', route, req.originalUrl);
+
+  try {
+    if (hasError && arity === 4) {
+      // error-handling middleware
+      handle(err, req, res, next);
+      return;
+    } else if (!hasError && arity < 4) {
+      // request-handling middleware
+      handle(req, res, next);
+      return;
+    }
+  } catch (e) {
+    // replace the error
+    error = e;
+  }
+
+  // continue
+  next(error);
+}
+
+/**
+ * Log error using console.error.
+ *
+ * @param {Error} err
+ * @private
+ */
+
+function logerror(err) {
+  if (env !== 'test') console.error(err.stack || err.toString());
+}
+
+/**
+ * Get get protocol + host for a URL.
+ *
+ * @param {string} url
+ * @private
+ */
+
+function getProtohost(url) {
+  if (url.length === 0 || url[0] === '/') {
+    return undefined;
+  }
+
+  var searchIndex = url.indexOf('?');
+  var pathLength = searchIndex !== -1
+    ? searchIndex
+    : url.length;
+  var fqdnIndex = url.substr(0, pathLength).indexOf('://');
+
+  return fqdnIndex !== -1
+    ? url.substr(0, url.indexOf('/', 3 + fqdnIndex))
+    : undefined;
+}
diff --git a/lib/connect.js b/lib/connect.js
deleted file mode 100644
index cc4cf35..0000000
--- a/lib/connect.js
+++ /dev/null
@@ -1,34 +0,0 @@
-/*!
- * Connect
- * Copyright(c) 2010 Sencha Inc.
- * Copyright(c) 2011 TJ Holowaychuk
- * MIT Licensed
- */
-
-/**
- * Module dependencies.
- */
-
-var EventEmitter = require('events').EventEmitter;
-var merge = require('utils-merge');
-var proto = require('./proto');
-
-// expose createServer() as the module
-
-module.exports = createServer;
-
-/**
- * Create a new connect server.
- *
- * @return {Function}
- * @api public
- */
-
-function createServer() {
-  function app(req, res, next){ app.handle(req, res, next); }
-  merge(app, proto);
-  merge(app, EventEmitter.prototype);
-  app.route = '/';
-  app.stack = [];
-  return app;
-}
diff --git a/lib/proto.js b/lib/proto.js
deleted file mode 100644
index ab8d3a1..0000000
--- a/lib/proto.js
+++ /dev/null
@@ -1,226 +0,0 @@
-/*!
- * Connect - HTTPServer
- * Copyright(c) 2010 Sencha Inc.
- * Copyright(c) 2011 TJ Holowaychuk
- * MIT Licensed
- */
-
-/**
- * Module dependencies.
- */
-
-var finalhandler = require('finalhandler');
-var http = require('http');
-var debug = require('debug')('connect:dispatcher');
-var parseUrl = require('parseurl');
-
-// prototype
-
-var app = module.exports = {};
-
-// environment
-
-var env = process.env.NODE_ENV || 'development';
-
-/**
- * Utilize the given middleware `handle` to the given `route`,
- * defaulting to _/_. This "route" is the mount-point for the
- * middleware, when given a value other than _/_ the middleware
- * is only effective when that segment is present in the request's
- * pathname.
- *
- * For example if we were to mount a function at _/admin_, it would
- * be invoked on _/admin_, and _/admin/settings_, however it would
- * not be invoked for _/_, or _/posts_.
- *
- * @param {String|Function|Server} route, callback or server
- * @param {Function|Server} callback or server
- * @return {Server} for chaining
- * @api public
- */
-
-app.use = function(route, fn){
-  // default route to '/'
-  if ('string' != typeof route) {
-    fn = route;
-    route = '/';
-  }
-
-  // wrap sub-apps
-  if ('function' == typeof fn.handle) {
-    var server = fn;
-    server.route = route;
-    fn = function(req, res, next){
-      server.handle(req, res, next);
-    };
-  }
-
-  // wrap vanilla http.Servers
-  if (fn instanceof http.Server) {
-    fn = fn.listeners('request')[0];
-  }
-
-  // strip trailing slash
-  if ('/' == route[route.length - 1]) {
-    route = route.slice(0, -1);
-  }
-
-  // add the middleware
-  debug('use %s %s', route || '/', fn.name || 'anonymous');
-  this.stack.push({ route: route, handle: fn });
-
-  return this;
-};
-
-/**
- * Handle server requests, punting them down
- * the middleware stack.
- *
- * @api private
- */
-
-app.handle = function(req, res, out) {
-  var stack = this.stack
-    , searchIndex = req.url.indexOf('?')
-    , pathlength = searchIndex !== -1 ? searchIndex : req.url.length
-    , fqdn = 1 + req.url.substr(0, pathlength).indexOf('://')
-    , protohost = fqdn ? req.url.substr(0, req.url.indexOf('/', 2 + fqdn)) : ''
-    , removed = ''
-    , slashAdded = false
-    , index = 0;
-
-  // final function handler
-  var done = out || finalhandler(req, res, {
-    env: env,
-    onerror: logerror
-  });
-
-  // store the original URL
-  req.originalUrl = req.originalUrl || req.url;
-
-  function next(err) {
-    if (slashAdded) {
-      req.url = req.url.substr(1);
-      slashAdded = false;
-    }
-
-    if (removed.length !== 0) {
-      req.url = protohost + removed + req.url.substr(protohost.length);
-      removed = '';
-    }
-
-    // next callback
-    var layer = stack[index++];
-
-    // all done
-    if (!layer) {
-      done(err);
-      return;
-    }
-
-    // route data
-    var path = parseUrl(req).pathname || '/';
-    var route = layer.route;
-
-    // skip this layer if the route doesn't match
-    if (path.toLowerCase().substr(0, route.length) !== route.toLowerCase()) {
-      return next(err);
-    }
-
-    // skip if route match does not border "/", ".", or end
-    var c = path[route.length];
-    if (c !== undefined && '/' !== c && '.' !== c) {
-      return next(err);
-    }
-
-    // trim off the part of the url that matches the route
-    if (route.length !== 0 && route !== '/') {
-      removed = route;
-      req.url = protohost + req.url.substr(protohost.length + removed.length);
-
-      // ensure leading slash
-      if (!fqdn && req.url[0] !== '/') {
-        req.url = '/' + req.url;
-        slashAdded = true;
-      }
-    }
-
-    // call the layer handle
-    call(layer.handle, route, err, req, res, next);
-  }
-
-  next();
-};
-
-/**
- * Listen for connections.
- *
- * This method takes the same arguments
- * as node's `http.Server#listen()`.
- *
- * HTTP and HTTPS:
- *
- * If you run your application both as HTTP
- * and HTTPS you may wrap them individually,
- * since your Connect "server" is really just
- * a JavaScript `Function`.
- *
- *      var connect = require('connect')
- *        , http = require('http')
- *        , https = require('https');
- *
- *      var app = connect();
- *
- *      http.createServer(app).listen(80);
- *      https.createServer(options, app).listen(443);
- *
- * @return {http.Server}
- * @api public
- */
-
-app.listen = function(){
-  var server = http.createServer(this);
-  return server.listen.apply(server, arguments);
-};
-
-/**
- * Invoke a route handle.
- *
- * @api private
- */
-
-function call(handle, route, err, req, res, next) {
-  var arity = handle.length;
-  var hasError = Boolean(err);
-
-  debug('%s %s : %s', handle.name || '<anonymous>', route, req.originalUrl);
-
-  try {
-    if (hasError && arity === 4) {
-      // error-handling middleware
-      handle(err, req, res, next);
-      return;
-    } else if (!hasError && arity < 4) {
-      // request-handling middleware
-      handle(req, res, next);
-      return;
-    }
-  } catch (e) {
-    // reset the error
-    err = e;
-  }
-
-  // continue
-  next(err);
-}
-
-/**
- * Log error using console.error.
- *
- * @param {Error} err
- * @api public
- */
-
-function logerror(err){
-  if (env !== 'test') console.error(err.stack || err.toString());
-}
diff --git a/package.json b/package.json
index 538279e..d3da9a6 100644
--- a/package.json
+++ b/package.json
@@ -1,7 +1,7 @@
 {
   "name": "connect",
   "description": "High performance middleware framework",
-  "version": "3.3.0",
+  "version": "3.4.1",
   "author": "TJ Holowaychuk <tj at vision-media.ca> (http://tjholowaychuk.com)",
   "contributors": [
     "Douglas Christopher Wilson <doug at somethingdoug.com>",
@@ -17,18 +17,23 @@
   ],
   "repository": "senchalabs/connect",
   "dependencies": {
-    "debug": "~2.1.0",
-    "finalhandler": "0.3.1",
-    "parseurl": "~1.3.0",
+    "debug": "~2.2.0",
+    "finalhandler": "0.4.1",
+    "parseurl": "~1.3.1",
     "utils-merge": "1.0.0"
   },
   "devDependencies": {
-    "istanbul": "0.3.2",
-    "mocha": "~1.21.4",
-    "should": "~4.0.0",
-    "supertest": "~0.14.0"
+    "istanbul": "0.4.2",
+    "mocha": "2.3.4",
+    "supertest": "1.1.0"
   },
   "license": "MIT",
+  "files": [
+    "LICENSE",
+    "History.md",
+    "Readme.md",
+    "index.js"
+  ],
   "engines": {
     "node": ">= 0.10.0"
   },
diff --git a/test/fqdn.js b/test/fqdn.js
index c853ab5..bc5b276 100644
--- a/test/fqdn.js
+++ b/test/fqdn.js
@@ -32,6 +32,16 @@ describe('app.use()', function(){
       .expect(200, '/?url=http://example.com/blog/post/1', done);
     });
 
+    it('should ignore FQDN in path', function (done) {
+      app.use('/proxy', function (req, res) {
+        res.end(req.url);
+      });
+
+      rawrequest(app)
+      .get('/proxy/http://example.com/blog/post/1')
+      .expect(200, '/http://example.com/blog/post/1', done);
+    });
+
     it('should adjust FQDN req.url', function(done){
       app.use('/blog', function(req, res){
         res.end(req.url);
@@ -78,7 +88,7 @@ function rawrequest(app) {
   function expect(status, body, callback) {
     server.listen(function(){
       var addr = this.address();
-      var hostname = addr.family === 'IPv6' ? '[::1]' : '127.0.0.1';
+      var hostname = addr.family === 'IPv6' ? '::1' : '127.0.0.1';
       var port = addr.port;
 
       var req = http.get({
diff --git a/test/mounting.js b/test/mounting.js
index 3bd14b1..4494e10 100644
--- a/test/mounting.js
+++ b/test/mounting.js
@@ -1,8 +1,8 @@
 
+var assert = require('assert');
 var connect = require('..');
 var http = require('http');
 var request = require('supertest');
-var should = require('should');
 
 describe('app.use()', function(){
   var app;
@@ -63,7 +63,7 @@ describe('app.use()', function(){
 
   it('should be case insensitive (lower-case route, mixed-case request)', function(done){
     var blog = http.createServer(function(req, res){
-      req.url.should.equal('/');
+      assert.equal(req.url, '/');
       res.end('blog');
     });
 
@@ -76,7 +76,7 @@ describe('app.use()', function(){
 
   it('should be case insensitive (mixed-case route, lower-case request)', function(done){
     var blog = http.createServer(function(req, res){
-      req.url.should.equal('/');
+      assert.equal(req.url, '/');
       res.end('blog');
     });
 
@@ -89,7 +89,7 @@ describe('app.use()', function(){
 
   it('should be case insensitive (mixed-case route, mixed-case request)', function(done){
     var blog = http.createServer(function(req, res){
-      req.url.should.equal('/');
+      assert.equal(req.url, '/');
       res.end('blog');
     });
 
@@ -126,7 +126,7 @@ describe('app.use()', function(){
       var blog = connect();
 
       blog.use(function(req, res){
-        req.url.should.equal('/');
+        assert.equal(req.url, '/');
         res.end('blog');
       });
 
@@ -163,7 +163,7 @@ describe('app.use()', function(){
       var blog = connect();
     
       blog.use(function(req, res){
-        req.url.should.equal('/');
+        assert.equal(req.url, '/');
         res.end('blog');
       });
     
@@ -179,9 +179,9 @@ describe('app.use()', function(){
       var admin = connect();
       app.use('/blog', blog);
       blog.use('/admin', admin);
-      app.route.should.equal('/');
-      blog.route.should.equal('/blog');
-      admin.route.should.equal('/admin');
+      assert.equal(app.route, '/');
+      assert.equal(blog.route, '/blog');
+      assert.equal(admin.route, '/admin');
     });
 
     it('should not add trailing slash to req.url', function(done) {
@@ -202,7 +202,7 @@ describe('app.use()', function(){
   describe('with a node app', function(){
     it('should mount', function(done){
       var blog = http.createServer(function(req, res){
-        req.url.should.equal('/');
+        assert.equal(req.url, '/');
         res.end('blog');
       });
 
diff --git a/test/server.js b/test/server.js
index 32f72ae..00871f8 100644
--- a/test/server.js
+++ b/test/server.js
@@ -3,7 +3,6 @@ var assert = require('assert');
 var connect = require('..');
 var http = require('http');
 var request = require('supertest');
-var should = require('should');
 
 describe('app', function(){
   var app;
@@ -17,6 +16,81 @@ describe('app', function(){
     app.emit('foo');
   });
 
+  it('should work in http.createServer', function(done){
+    var app = connect();
+
+    app.use(function (req, res) {
+      res.end('hello, world!');
+    });
+
+    var server = http.createServer(app);
+
+    request(server)
+    .get('/')
+    .expect(200, 'hello, world!', done);
+  })
+
+  it('should be a callable function', function(done){
+    var app = connect();
+
+    app.use(function (req, res) {
+      res.end('hello, world!');
+    });
+
+    function handler(req, res) {
+      res.write('oh, ');
+      app(req, res);
+    }
+
+    var server = http.createServer(handler);
+
+    request(server)
+    .get('/')
+    .expect(200, 'oh, hello, world!', done);
+  })
+
+  it('should invoke callback if request not handled', function(done){
+    var app = connect();
+
+    app.use('/foo', function (req, res) {
+      res.end('hello, world!');
+    });
+
+    function handler(req, res) {
+      res.write('oh, ');
+      app(req, res, function() {
+        res.end('no!');
+      });
+    }
+
+    var server = http.createServer(handler);
+
+    request(server)
+    .get('/')
+    .expect(200, 'oh, no!', done);
+  })
+
+  it('should invoke callback on error', function(done){
+    var app = connect();
+
+    app.use(function (req, res) {
+      throw new Error('boom!');
+    });
+
+    function handler(req, res) {
+      res.write('oh, ');
+      app(req, res, function(err) {
+        res.end(err.message);
+      });
+    }
+
+    var server = http.createServer(handler);
+
+    request(server)
+    .get('/')
+    .expect(200, 'oh, boom!', done);
+  })
+
   it('should work as middleware', function(done){
     // custom server handler array
     var handlers = [connect(), function(req, res, next){
@@ -35,22 +109,11 @@ describe('app', function(){
     }
 
     // create a non-connect server
-    var server = http.createServer(run).listen(5556, function(){
-      http.get({
-        host: 'localhost',
-        port: 5556,
-        path: '/'
-      }, function(res){
-        var buf = '';
-        res.setEncoding('utf8');
-        res.on('data', function(s){ buf += s });
-        res.on('end', function(){
-          buf.should.eql('Ok');
-          server.close();
-          done();
-        });
-      });
-    });
+    var server = http.createServer(run);
+
+    request(server)
+    .get('/')
+    .expect(200, 'Ok', done);
   });
 
   it('should escape the 500 response body', function(done){
@@ -171,7 +234,7 @@ function rawrequest(app) {
   function expect(status, body, callback) {
     server.listen(function(){
       var addr = this.address();
-      var hostname = addr.family === 'IPv6' ? '[::1]' : '127.0.0.1';
+      var hostname = addr.family === 'IPv6' ? '::1' : '127.0.0.1';
       var port = addr.port;
 
       var req = http.get({

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-javascript/node-connect.git



More information about the Pkg-javascript-commits mailing list