deps: send@0.15.5
[express.git] / History.md
blob83cd43185e524a0a0e4d7fa85612f157a211950a
1 unreleased
2 ==========
4   * deps: fresh@0.5.2
5     - Fix handling of modified headers with invalid dates
6     - perf: improve ETag match loop
7     - perf: improve `If-None-Match` token parsing
8   * deps: send@0.15.5
9     - Fix handling of modified headers with invalid dates
10     - deps: etag@~1.8.1
11     - deps: fresh@0.5.2
13 4.15.4 / 2017-08-06
14 ===================
16   * deps: debug@2.6.8
17   * deps: depd@~1.1.1
18     - Remove unnecessary `Buffer` loading
19   * deps: finalhandler@~1.0.4
20     - deps: debug@2.6.8
21   * deps: proxy-addr@~1.1.5
22     - Fix array argument being altered
23     - deps: ipaddr.js@1.4.0
24   * deps: qs@6.5.0
25   * deps: send@0.15.4
26     - deps: debug@2.6.8
27     - deps: depd@~1.1.1
28     - deps: http-errors@~1.6.2
29   * deps: serve-static@1.12.4
30     - deps: send@0.15.4
32 4.15.3 / 2017-05-16
33 ===================
35   * Fix error when `res.set` cannot add charset to `Content-Type`
36   * deps: debug@2.6.7
37     - Fix `DEBUG_MAX_ARRAY_LENGTH`
38     - deps: ms@2.0.0
39   * deps: finalhandler@~1.0.3
40     - Fix missing `</html>` in HTML document
41     - deps: debug@2.6.7
42   * deps: proxy-addr@~1.1.4
43     - deps: ipaddr.js@1.3.0
44   * deps: send@0.15.3
45     - deps: debug@2.6.7
46     - deps: ms@2.0.0
47   * deps: serve-static@1.12.3
48     - deps: send@0.15.3
49   * deps: type-is@~1.6.15
50     - deps: mime-types@~2.1.15
51   * deps: vary@~1.1.1
52     - perf: hoist regular expression
54 4.15.2 / 2017-03-06
55 ===================
57   * deps: qs@6.4.0
58     - Fix regression parsing keys starting with `[`
60 4.15.1 / 2017-03-05
61 ===================
63   * deps: send@0.15.1
64     - Fix issue when `Date.parse` does not return `NaN` on invalid date
65     - Fix strict violation in broken environments
66   * deps: serve-static@1.12.1
67     - Fix issue when `Date.parse` does not return `NaN` on invalid date
68     - deps: send@0.15.1
70 4.15.0 / 2017-03-01
71 ===================
73   * Add debug message when loading view engine
74   * Add `next("router")` to exit from router
75   * Fix case where `router.use` skipped requests routes did not
76   * Remove usage of `res._headers` private field
77     - Improves compatibility with Node.js 8 nightly
78   * Skip routing when `req.url` is not set
79   * Use `%o` in path debug to tell types apart
80   * Use `Object.create` to setup request & response prototypes
81   * Use `setprototypeof` module to replace `__proto__` setting
82   * Use `statuses` instead of `http` module for status messages
83   * deps: debug@2.6.1
84     - Allow colors in workers
85     - Deprecated `DEBUG_FD` environment variable set to `3` or higher
86     - Fix error when running under React Native
87     - Use same color for same namespace
88     - deps: ms@0.7.2
89   * deps: etag@~1.8.0
90     - Use SHA1 instead of MD5 for ETag hashing
91     - Works with FIPS 140-2 OpenSSL configuration
92   * deps: finalhandler@~1.0.0
93     - Fix exception when `err` cannot be converted to a string
94     - Fully URL-encode the pathname in the 404
95     - Only include the pathname in the 404 message
96     - Send complete HTML document
97     - Set `Content-Security-Policy: default-src 'self'` header
98     - deps: debug@2.6.1
99   * deps: fresh@0.5.0
100     - Fix false detection of `no-cache` request directive
101     - Fix incorrect result when `If-None-Match` has both `*` and ETags
102     - Fix weak `ETag` matching to match spec
103     - perf: delay reading header values until needed
104     - perf: enable strict mode
105     - perf: hoist regular expressions
106     - perf: remove duplicate conditional
107     - perf: remove unnecessary boolean coercions
108     - perf: skip checking modified time if ETag check failed
109     - perf: skip parsing `If-None-Match` when no `ETag` header
110     - perf: use `Date.parse` instead of `new Date`
111   * deps: qs@6.3.1
112     - Fix array parsing from skipping empty values
113     - Fix compacting nested arrays
114   * deps: send@0.15.0
115     - Fix false detection of `no-cache` request directive
116     - Fix incorrect result when `If-None-Match` has both `*` and ETags
117     - Fix weak `ETag` matching to match spec
118     - Remove usage of `res._headers` private field
119     - Support `If-Match` and `If-Unmodified-Since` headers
120     - Use `res.getHeaderNames()` when available
121     - Use `res.headersSent` when available
122     - deps: debug@2.6.1
123     - deps: etag@~1.8.0
124     - deps: fresh@0.5.0
125     - deps: http-errors@~1.6.1
126   * deps: serve-static@1.12.0
127     - Fix false detection of `no-cache` request directive
128     - Fix incorrect result when `If-None-Match` has both `*` and ETags
129     - Fix weak `ETag` matching to match spec
130     - Remove usage of `res._headers` private field
131     - Send complete HTML document in redirect response
132     - Set default CSP header in redirect response
133     - Support `If-Match` and `If-Unmodified-Since` headers
134     - Use `res.getHeaderNames()` when available
135     - Use `res.headersSent` when available
136     - deps: send@0.15.0
137   * perf: add fast match path for `*` route
138   * perf: improve `req.ips` performance
140 4.14.1 / 2017-01-28
141 ===================
143   * deps: content-disposition@0.5.2
144   * deps: finalhandler@0.5.1
145     - Fix exception when `err.headers` is not an object
146     - deps: statuses@~1.3.1
147     - perf: hoist regular expressions
148     - perf: remove duplicate validation path
149   * deps: proxy-addr@~1.1.3
150     - deps: ipaddr.js@1.2.0
151   * deps: send@0.14.2
152     - deps: http-errors@~1.5.1
153     - deps: ms@0.7.2
154     - deps: statuses@~1.3.1
155   * deps: serve-static@~1.11.2
156     - deps: send@0.14.2
157   * deps: type-is@~1.6.14
158     - deps: mime-types@~2.1.13
160 4.14.0 / 2016-06-16
161 ===================
163   * Add `acceptRanges` option to `res.sendFile`/`res.sendfile`
164   * Add `cacheControl` option to `res.sendFile`/`res.sendfile`
165   * Add `options` argument to `req.range`
166     - Includes the `combine` option
167   * Encode URL in `res.location`/`res.redirect` if not already encoded
168   * Fix some redirect handling in `res.sendFile`/`res.sendfile`
169   * Fix Windows absolute path check using forward slashes
170   * Improve error with invalid arguments to `req.get()`
171   * Improve performance for `res.json`/`res.jsonp` in most cases
172   * Improve `Range` header handling in `res.sendFile`/`res.sendfile`
173   * deps: accepts@~1.3.3
174     - Fix including type extensions in parameters in `Accept` parsing
175     - Fix parsing `Accept` parameters with quoted equals
176     - Fix parsing `Accept` parameters with quoted semicolons
177     - Many performance improvments
178     - deps: mime-types@~2.1.11
179     - deps: negotiator@0.6.1
180   * deps: content-type@~1.0.2
181     - perf: enable strict mode
182   * deps: cookie@0.3.1
183     - Add `sameSite` option
184     - Fix cookie `Max-Age` to never be a floating point number
185     - Improve error message when `encode` is not a function
186     - Improve error message when `expires` is not a `Date`
187     - Throw better error for invalid argument to parse
188     - Throw on invalid values provided to `serialize`
189     - perf: enable strict mode
190     - perf: hoist regular expression
191     - perf: use for loop in parse
192     - perf: use string concatination for serialization
193   * deps: finalhandler@0.5.0
194     - Change invalid or non-numeric status code to 500
195     - Overwrite status message to match set status code
196     - Prefer `err.statusCode` if `err.status` is invalid
197     - Set response headers from `err.headers` object
198     - Use `statuses` instead of `http` module for status messages
199   * deps: proxy-addr@~1.1.2
200     - Fix accepting various invalid netmasks
201     - Fix IPv6-mapped IPv4 validation edge cases
202     - IPv4 netmasks must be contingous
203     - IPv6 addresses cannot be used as a netmask
204     - deps: ipaddr.js@1.1.1
205   * deps: qs@6.2.0
206     - Add `decoder` option in `parse` function
207   * deps: range-parser@~1.2.0
208     - Add `combine` option to combine overlapping ranges
209     - Fix incorrectly returning -1 when there is at least one valid range
210     - perf: remove internal function
211   * deps: send@0.14.1
212     - Add `acceptRanges` option
213     - Add `cacheControl` option
214     - Attempt to combine multiple ranges into single range
215     - Correctly inherit from `Stream` class
216     - Fix `Content-Range` header in 416 responses when using `start`/`end` options
217     - Fix `Content-Range` header missing from default 416 responses
218     - Fix redirect error when `path` contains raw non-URL characters
219     - Fix redirect when `path` starts with multiple forward slashes
220     - Ignore non-byte `Range` headers
221     - deps: http-errors@~1.5.0
222     - deps: range-parser@~1.2.0
223     - deps: statuses@~1.3.0
224     - perf: remove argument reassignment
225   * deps: serve-static@~1.11.1
226     - Add `acceptRanges` option
227     - Add `cacheControl` option
228     - Attempt to combine multiple ranges into single range
229     - Fix redirect error when `req.url` contains raw non-URL characters
230     - Ignore non-byte `Range` headers
231     - Use status code 301 for redirects
232     - deps: send@0.14.1
233   * deps: type-is@~1.6.13
234     - Fix type error when given invalid type to match against
235     - deps: mime-types@~2.1.11
236   * deps: vary@~1.1.0
237     - Only accept valid field names in the `field` argument
238   * perf: use strict equality when possible
240 4.13.4 / 2016-01-21
241 ===================
243   * deps: content-disposition@0.5.1
244     - perf: enable strict mode
245   * deps: cookie@0.1.5
246     - Throw on invalid values provided to `serialize`
247   * deps: depd@~1.1.0
248     - Support web browser loading
249     - perf: enable strict mode
250   * deps: escape-html@~1.0.3
251     - perf: enable strict mode
252     - perf: optimize string replacement
253     - perf: use faster string coercion
254   * deps: finalhandler@0.4.1
255     - deps: escape-html@~1.0.3
256   * deps: merge-descriptors@1.0.1
257     - perf: enable strict mode
258   * deps: methods@~1.1.2
259     - perf: enable strict mode
260   * deps: parseurl@~1.3.1
261     - perf: enable strict mode
262   * deps: proxy-addr@~1.0.10
263     - deps: ipaddr.js@1.0.5
264     - perf: enable strict mode
265   * deps: range-parser@~1.0.3
266     - perf: enable strict mode
267   * deps: send@0.13.1
268     - deps: depd@~1.1.0
269     - deps: destroy@~1.0.4
270     - deps: escape-html@~1.0.3
271     - deps: range-parser@~1.0.3
272   * deps: serve-static@~1.10.2
273     - deps: escape-html@~1.0.3
274     - deps: parseurl@~1.3.0
275     - deps: send@0.13.1
277 4.13.3 / 2015-08-02
278 ===================
280   * Fix infinite loop condition using `mergeParams: true`
281   * Fix inner numeric indices incorrectly altering parent `req.params`
283 4.13.2 / 2015-07-31
284 ===================
286   * deps: accepts@~1.2.12
287     - deps: mime-types@~2.1.4
288   * deps: array-flatten@1.1.1
289     - perf: enable strict mode
290   * deps: path-to-regexp@0.1.7
291     - Fix regression with escaped round brackets and matching groups
292   * deps: type-is@~1.6.6
293     - deps: mime-types@~2.1.4
295 4.13.1 / 2015-07-05
296 ===================
298   * deps: accepts@~1.2.10
299     - deps: mime-types@~2.1.2
300   * deps: qs@4.0.0
301     - Fix dropping parameters like `hasOwnProperty`
302     - Fix various parsing edge cases
303   * deps: type-is@~1.6.4
304     - deps: mime-types@~2.1.2
305     - perf: enable strict mode
306     - perf: remove argument reassignment
308 4.13.0 / 2015-06-20
309 ===================
311   * Add settings to debug output
312   * Fix `res.format` error when only `default` provided
313   * Fix issue where `next('route')` in `app.param` would incorrectly skip values
314   * Fix hiding platform issues with `decodeURIComponent`
315     - Only `URIError`s are a 400
316   * Fix using `*` before params in routes
317   * Fix using capture groups before params in routes
318   * Simplify `res.cookie` to call `res.append`
319   * Use `array-flatten` module for flattening arrays
320   * deps: accepts@~1.2.9
321     - deps: mime-types@~2.1.1
322     - perf: avoid argument reassignment & argument slice
323     - perf: avoid negotiator recursive construction
324     - perf: enable strict mode
325     - perf: remove unnecessary bitwise operator
326   * deps: cookie@0.1.3
327     - perf: deduce the scope of try-catch deopt
328     - perf: remove argument reassignments
329   * deps: escape-html@1.0.2
330   * deps: etag@~1.7.0
331     - Always include entity length in ETags for hash length extensions
332     - Generate non-Stats ETags using MD5 only (no longer CRC32)
333     - Improve stat performance by removing hashing
334     - Improve support for JXcore
335     - Remove base64 padding in ETags to shorten
336     - Support "fake" stats objects in environments without fs
337     - Use MD5 instead of MD4 in weak ETags over 1KB
338   * deps: finalhandler@0.4.0
339     - Fix a false-positive when unpiping in Node.js 0.8
340     - Support `statusCode` property on `Error` objects
341     - Use `unpipe` module for unpiping requests
342     - deps: escape-html@1.0.2
343     - deps: on-finished@~2.3.0
344     - perf: enable strict mode
345     - perf: remove argument reassignment
346   * deps: fresh@0.3.0
347     - Add weak `ETag` matching support
348   * deps: on-finished@~2.3.0
349     - Add defined behavior for HTTP `CONNECT` requests
350     - Add defined behavior for HTTP `Upgrade` requests
351     - deps: ee-first@1.1.1
352   * deps: path-to-regexp@0.1.6
353   * deps: send@0.13.0
354     - Allow Node.js HTTP server to set `Date` response header
355     - Fix incorrectly removing `Content-Location` on 304 response
356     - Improve the default redirect response headers
357     - Send appropriate headers on default error response
358     - Use `http-errors` for standard emitted errors
359     - Use `statuses` instead of `http` module for status messages
360     - deps: escape-html@1.0.2
361     - deps: etag@~1.7.0
362     - deps: fresh@0.3.0
363     - deps: on-finished@~2.3.0
364     - perf: enable strict mode
365     - perf: remove unnecessary array allocations
366   * deps: serve-static@~1.10.0
367     - Add `fallthrough` option
368     - Fix reading options from options prototype
369     - Improve the default redirect response headers
370     - Malformed URLs now `next()` instead of 400
371     - deps: escape-html@1.0.2
372     - deps: send@0.13.0
373     - perf: enable strict mode
374     - perf: remove argument reassignment
375   * deps: type-is@~1.6.3
376     - deps: mime-types@~2.1.1
377     - perf: reduce try block size
378     - perf: remove bitwise operations
379   * perf: enable strict mode
380   * perf: isolate `app.render` try block
381   * perf: remove argument reassignments in application
382   * perf: remove argument reassignments in request prototype
383   * perf: remove argument reassignments in response prototype
384   * perf: remove argument reassignments in routing
385   * perf: remove argument reassignments in `View`
386   * perf: skip attempting to decode zero length string
387   * perf: use saved reference to `http.STATUS_CODES`
389 4.12.4 / 2015-05-17
390 ===================
392   * deps: accepts@~1.2.7
393     - deps: mime-types@~2.0.11
394     - deps: negotiator@0.5.3
395   * deps: debug@~2.2.0
396     - deps: ms@0.7.1
397   * deps: depd@~1.0.1
398   * deps: etag@~1.6.0
399     - Improve support for JXcore
400     - Support "fake" stats objects in environments without `fs`
401   * deps: finalhandler@0.3.6
402     - deps: debug@~2.2.0
403     - deps: on-finished@~2.2.1
404   * deps: on-finished@~2.2.1
405     - Fix `isFinished(req)` when data buffered
406   * deps: proxy-addr@~1.0.8
407     - deps: ipaddr.js@1.0.1
408   * deps: qs@2.4.2
409    - Fix allowing parameters like `constructor`
410   * deps: send@0.12.3
411     - deps: debug@~2.2.0
412     - deps: depd@~1.0.1
413     - deps: etag@~1.6.0
414     - deps: ms@0.7.1
415     - deps: on-finished@~2.2.1
416   * deps: serve-static@~1.9.3
417     - deps: send@0.12.3
418   * deps: type-is@~1.6.2
419     - deps: mime-types@~2.0.11
421 4.12.3 / 2015-03-17
422 ===================
424   * deps: accepts@~1.2.5
425     - deps: mime-types@~2.0.10
426   * deps: debug@~2.1.3
427     - Fix high intensity foreground color for bold
428     - deps: ms@0.7.0
429   * deps: finalhandler@0.3.4
430     - deps: debug@~2.1.3
431   * deps: proxy-addr@~1.0.7
432     - deps: ipaddr.js@0.1.9
433   * deps: qs@2.4.1
434     - Fix error when parameter `hasOwnProperty` is present
435   * deps: send@0.12.2
436     - Throw errors early for invalid `extensions` or `index` options
437     - deps: debug@~2.1.3
438   * deps: serve-static@~1.9.2
439     - deps: send@0.12.2
440   * deps: type-is@~1.6.1
441     - deps: mime-types@~2.0.10
443 4.12.2 / 2015-03-02
444 ===================
446   * Fix regression where `"Request aborted"` is logged using `res.sendFile`
448 4.12.1 / 2015-03-01
449 ===================
451   * Fix constructing application with non-configurable prototype properties
452   * Fix `ECONNRESET` errors from `res.sendFile` usage
453   * Fix `req.host` when using "trust proxy" hops count
454   * Fix `req.protocol`/`req.secure` when using "trust proxy" hops count
455   * Fix wrong `code` on aborted connections from `res.sendFile`
456   * deps: merge-descriptors@1.0.0
458 4.12.0 / 2015-02-23
459 ===================
461   * Fix `"trust proxy"` setting to inherit when app is mounted
462   * Generate `ETag`s for all request responses
463     - No longer restricted to only responses for `GET` and `HEAD` requests
464   * Use `content-type` to parse `Content-Type` headers
465   * deps: accepts@~1.2.4
466     - Fix preference sorting to be stable for long acceptable lists
467     - deps: mime-types@~2.0.9
468     - deps: negotiator@0.5.1
469   * deps: cookie-signature@1.0.6
470   * deps: send@0.12.1
471     - Always read the stat size from the file
472     - Fix mutating passed-in `options`
473     - deps: mime@1.3.4
474   * deps: serve-static@~1.9.1
475     - deps: send@0.12.1
476   * deps: type-is@~1.6.0
477     - fix argument reassignment
478     - fix false-positives in `hasBody` `Transfer-Encoding` check
479     - support wildcard for both type and subtype (`*/*`)
480     - deps: mime-types@~2.0.9
482 4.11.2 / 2015-02-01
483 ===================
485   * Fix `res.redirect` double-calling `res.end` for `HEAD` requests
486   * deps: accepts@~1.2.3
487     - deps: mime-types@~2.0.8
488   * deps: proxy-addr@~1.0.6
489     - deps: ipaddr.js@0.1.8
490   * deps: type-is@~1.5.6
491     - deps: mime-types@~2.0.8
493 4.11.1 / 2015-01-20
494 ===================
496   * deps: send@0.11.1
497     - Fix root path disclosure
498   * deps: serve-static@~1.8.1
499     - Fix redirect loop in Node.js 0.11.14
500     - Fix root path disclosure
501     - deps: send@0.11.1
503 4.11.0 / 2015-01-13
504 ===================
506   * Add `res.append(field, val)` to append headers
507   * Deprecate leading `:` in `name` for `app.param(name, fn)`
508   * Deprecate `req.param()` -- use `req.params`, `req.body`, or `req.query` instead
509   * Deprecate `app.param(fn)`
510   * Fix `OPTIONS` responses to include the `HEAD` method properly
511   * Fix `res.sendFile` not always detecting aborted connection
512   * Match routes iteratively to prevent stack overflows
513   * deps: accepts@~1.2.2
514     - deps: mime-types@~2.0.7
515     - deps: negotiator@0.5.0
516   * deps: send@0.11.0
517     - deps: debug@~2.1.1
518     - deps: etag@~1.5.1
519     - deps: ms@0.7.0
520     - deps: on-finished@~2.2.0
521   * deps: serve-static@~1.8.0
522     - deps: send@0.11.0
524 4.10.8 / 2015-01-13
525 ===================
527   * Fix crash from error within `OPTIONS` response handler
528   * deps: proxy-addr@~1.0.5
529     - deps: ipaddr.js@0.1.6
531 4.10.7 / 2015-01-04
532 ===================
534   * Fix `Allow` header for `OPTIONS` to not contain duplicate methods
535   * Fix incorrect "Request aborted" for `res.sendFile` when `HEAD` or 304
536   * deps: debug@~2.1.1
537   * deps: finalhandler@0.3.3
538     - deps: debug@~2.1.1
539     - deps: on-finished@~2.2.0
540   * deps: methods@~1.1.1
541   * deps: on-finished@~2.2.0
542   * deps: serve-static@~1.7.2
543     - Fix potential open redirect when mounted at root
544   * deps: type-is@~1.5.5
545     - deps: mime-types@~2.0.7
547 4.10.6 / 2014-12-12
548 ===================
550   * Fix exception in `req.fresh`/`req.stale` without response headers
552 4.10.5 / 2014-12-10
553 ===================
555   * Fix `res.send` double-calling `res.end` for `HEAD` requests
556   * deps: accepts@~1.1.4
557     - deps: mime-types@~2.0.4
558   * deps: type-is@~1.5.4
559     - deps: mime-types@~2.0.4
561 4.10.4 / 2014-11-24
562 ===================
564   * Fix `res.sendfile` logging standard write errors
566 4.10.3 / 2014-11-23
567 ===================
569   * Fix `res.sendFile` logging standard write errors
570   * deps: etag@~1.5.1
571   * deps: proxy-addr@~1.0.4
572     - deps: ipaddr.js@0.1.5
573   * deps: qs@2.3.3
574     - Fix `arrayLimit` behavior
576 4.10.2 / 2014-11-09
577 ===================
579   * Correctly invoke async router callback asynchronously
580   * deps: accepts@~1.1.3
581     - deps: mime-types@~2.0.3
582   * deps: type-is@~1.5.3
583     - deps: mime-types@~2.0.3
585 4.10.1 / 2014-10-28
586 ===================
588   * Fix handling of URLs containing `://` in the path
589   * deps: qs@2.3.2
590     - Fix parsing of mixed objects and values
592 4.10.0 / 2014-10-23
593 ===================
595   * Add support for `app.set('views', array)`
596     - Views are looked up in sequence in array of directories
597   * Fix `res.send(status)` to mention `res.sendStatus(status)`
598   * Fix handling of invalid empty URLs
599   * Use `content-disposition` module for `res.attachment`/`res.download`
600     - Sends standards-compliant `Content-Disposition` header
601     - Full Unicode support
602   * Use `path.resolve` in view lookup
603   * deps: debug@~2.1.0
604     - Implement `DEBUG_FD` env variable support
605   * deps: depd@~1.0.0
606   * deps: etag@~1.5.0
607     - Improve string performance
608     - Slightly improve speed for weak ETags over 1KB
609   * deps: finalhandler@0.3.2
610     - Terminate in progress response only on error
611     - Use `on-finished` to determine request status
612     - deps: debug@~2.1.0
613     - deps: on-finished@~2.1.1
614   * deps: on-finished@~2.1.1
615     - Fix handling of pipelined requests
616   * deps: qs@2.3.0
617     - Fix parsing of mixed implicit and explicit arrays
618   * deps: send@0.10.1
619     - deps: debug@~2.1.0
620     - deps: depd@~1.0.0
621     - deps: etag@~1.5.0
622     - deps: on-finished@~2.1.1
623   * deps: serve-static@~1.7.1
624     - deps: send@0.10.1
626 4.9.8 / 2014-10-17
627 ==================
629   * Fix `res.redirect` body when redirect status specified
630   * deps: accepts@~1.1.2
631     - Fix error when media type has invalid parameter
632     - deps: negotiator@0.4.9
634 4.9.7 / 2014-10-10
635 ==================
637   * Fix using same param name in array of paths
639 4.9.6 / 2014-10-08
640 ==================
642   * deps: accepts@~1.1.1
643     - deps: mime-types@~2.0.2
644     - deps: negotiator@0.4.8
645   * deps: serve-static@~1.6.4
646     - Fix redirect loop when index file serving disabled
647   * deps: type-is@~1.5.2
648     - deps: mime-types@~2.0.2
650 4.9.5 / 2014-09-24
651 ==================
653   * deps: etag@~1.4.0
654   * deps: proxy-addr@~1.0.3
655     - Use `forwarded` npm module
656   * deps: send@0.9.3
657     - deps: etag@~1.4.0
658   * deps: serve-static@~1.6.3
659     - deps: send@0.9.3
661 4.9.4 / 2014-09-19
662 ==================
664   * deps: qs@2.2.4
665     - Fix issue with object keys starting with numbers truncated
667 4.9.3 / 2014-09-18
668 ==================
670   * deps: proxy-addr@~1.0.2
671     - Fix a global leak when multiple subnets are trusted
672     - deps: ipaddr.js@0.1.3
674 4.9.2 / 2014-09-17
675 ==================
677   * Fix regression for empty string `path` in `app.use`
678   * Fix `router.use` to accept array of middleware without path
679   * Improve error message for bad `app.use` arguments
681 4.9.1 / 2014-09-16
682 ==================
684   * Fix `app.use` to accept array of middleware without path
685   * deps: depd@0.4.5
686   * deps: etag@~1.3.1
687   * deps: send@0.9.2
688     - deps: depd@0.4.5
689     - deps: etag@~1.3.1
690     - deps: range-parser@~1.0.2
691   * deps: serve-static@~1.6.2
692     - deps: send@0.9.2
694 4.9.0 / 2014-09-08
695 ==================
697   * Add `res.sendStatus`
698   * Invoke callback for sendfile when client aborts
699     - Applies to `res.sendFile`, `res.sendfile`, and `res.download`
700     - `err` will be populated with request aborted error
701   * Support IP address host in `req.subdomains`
702   * Use `etag` to generate `ETag` headers
703   * deps: accepts@~1.1.0
704     - update `mime-types`
705   * deps: cookie-signature@1.0.5
706   * deps: debug@~2.0.0
707   * deps: finalhandler@0.2.0
708     - Set `X-Content-Type-Options: nosniff` header
709     - deps: debug@~2.0.0
710   * deps: fresh@0.2.4
711   * deps: media-typer@0.3.0
712     - Throw error when parameter format invalid on parse
713   * deps: qs@2.2.3
714     - Fix issue where first empty value in array is discarded
715   * deps: range-parser@~1.0.2
716   * deps: send@0.9.1
717     - Add `lastModified` option
718     - Use `etag` to generate `ETag` header
719     - deps: debug@~2.0.0
720     - deps: fresh@0.2.4
721   * deps: serve-static@~1.6.1
722     - Add `lastModified` option
723     - deps: send@0.9.1
724   * deps: type-is@~1.5.1
725     - fix `hasbody` to be true for `content-length: 0`
726     - deps: media-typer@0.3.0
727     - deps: mime-types@~2.0.1
728   * deps: vary@~1.0.0
729     - Accept valid `Vary` header string as `field`
731 4.8.8 / 2014-09-04
732 ==================
734   * deps: send@0.8.5
735     - Fix a path traversal issue when using `root`
736     - Fix malicious path detection for empty string path
737   * deps: serve-static@~1.5.4
738     - deps: send@0.8.5
740 4.8.7 / 2014-08-29
741 ==================
743   * deps: qs@2.2.2
744     - Remove unnecessary cloning
746 4.8.6 / 2014-08-27
747 ==================
749   * deps: qs@2.2.0
750     - Array parsing fix
751     - Performance improvements
753 4.8.5 / 2014-08-18
754 ==================
756   * deps: send@0.8.3
757     - deps: destroy@1.0.3
758     - deps: on-finished@2.1.0
759   * deps: serve-static@~1.5.3
760     - deps: send@0.8.3
762 4.8.4 / 2014-08-14
763 ==================
765   * deps: qs@1.2.2
766   * deps: send@0.8.2
767     - Work around `fd` leak in Node.js 0.10 for `fs.ReadStream`
768   * deps: serve-static@~1.5.2
769     - deps: send@0.8.2
771 4.8.3 / 2014-08-10
772 ==================
774   * deps: parseurl@~1.3.0
775   * deps: qs@1.2.1
776   * deps: serve-static@~1.5.1
777     - Fix parsing of weird `req.originalUrl` values
778     - deps: parseurl@~1.3.0
779     - deps: utils-merge@1.0.0
781 4.8.2 / 2014-08-07
782 ==================
784   * deps: qs@1.2.0
785     - Fix parsing array of objects
787 4.8.1 / 2014-08-06
788 ==================
790   * fix incorrect deprecation warnings on `res.download`
791   * deps: qs@1.1.0
792     - Accept urlencoded square brackets
793     - Accept empty values in implicit array notation
795 4.8.0 / 2014-08-05
796 ==================
798   * add `res.sendFile`
799     - accepts a file system path instead of a URL
800     - requires an absolute path or `root` option specified
801   * deprecate `res.sendfile` -- use `res.sendFile` instead
802   * support mounted app as any argument to `app.use()`
803   * deps: qs@1.0.2
804     - Complete rewrite
805     - Limits array length to 20
806     - Limits object depth to 5
807     - Limits parameters to 1,000
808   * deps: send@0.8.1
809     - Add `extensions` option
810   * deps: serve-static@~1.5.0
811     - Add `extensions` option
812     - deps: send@0.8.1
814 4.7.4 / 2014-08-04
815 ==================
817   * fix `res.sendfile` regression for serving directory index files
818   * deps: send@0.7.4
819     - Fix incorrect 403 on Windows and Node.js 0.11
820     - Fix serving index files without root dir
821   * deps: serve-static@~1.4.4
822     - deps: send@0.7.4
824 4.7.3 / 2014-08-04
825 ==================
827   * deps: send@0.7.3
828     - Fix incorrect 403 on Windows and Node.js 0.11
829   * deps: serve-static@~1.4.3
830     - Fix incorrect 403 on Windows and Node.js 0.11
831     - deps: send@0.7.3
833 4.7.2 / 2014-07-27
834 ==================
836   * deps: depd@0.4.4
837     - Work-around v8 generating empty stack traces
838   * deps: send@0.7.2
839     - deps: depd@0.4.4
840   * deps: serve-static@~1.4.2
842 4.7.1 / 2014-07-26
843 ==================
845   * deps: depd@0.4.3
846     - Fix exception when global `Error.stackTraceLimit` is too low
847   * deps: send@0.7.1
848     - deps: depd@0.4.3
849   * deps: serve-static@~1.4.1
851 4.7.0 / 2014-07-25
852 ==================
854   * fix `req.protocol` for proxy-direct connections
855   * configurable query parser with `app.set('query parser', parser)`
856     - `app.set('query parser', 'extended')` parse with "qs" module
857     - `app.set('query parser', 'simple')` parse with "querystring" core module
858     - `app.set('query parser', false)` disable query string parsing
859     - `app.set('query parser', true)` enable simple parsing
860   * deprecate `res.json(status, obj)` -- use `res.status(status).json(obj)` instead
861   * deprecate `res.jsonp(status, obj)` -- use `res.status(status).jsonp(obj)` instead
862   * deprecate `res.send(status, body)` -- use `res.status(status).send(body)` instead
863   * deps: debug@1.0.4
864   * deps: depd@0.4.2
865     - Add `TRACE_DEPRECATION` environment variable
866     - Remove non-standard grey color from color output
867     - Support `--no-deprecation` argument
868     - Support `--trace-deprecation` argument
869   * deps: finalhandler@0.1.0
870     - Respond after request fully read
871     - deps: debug@1.0.4
872   * deps: parseurl@~1.2.0
873     - Cache URLs based on original value
874     - Remove no-longer-needed URL mis-parse work-around
875     - Simplify the "fast-path" `RegExp`
876   * deps: send@0.7.0
877     - Add `dotfiles` option
878     - Cap `maxAge` value to 1 year
879     - deps: debug@1.0.4
880     - deps: depd@0.4.2
881   * deps: serve-static@~1.4.0
882     - deps: parseurl@~1.2.0
883     - deps: send@0.7.0
884   * perf: prevent multiple `Buffer` creation in `res.send`
886 4.6.1 / 2014-07-12
887 ==================
889   * fix `subapp.mountpath` regression for `app.use(subapp)`
891 4.6.0 / 2014-07-11
892 ==================
894   * accept multiple callbacks to `app.use()`
895   * add explicit "Rosetta Flash JSONP abuse" protection
896     - previous versions are not vulnerable; this is just explicit protection
897   * catch errors in multiple `req.param(name, fn)` handlers
898   * deprecate `res.redirect(url, status)` -- use `res.redirect(status, url)` instead
899   * fix `res.send(status, num)` to send `num` as json (not error)
900   * remove unnecessary escaping when `res.jsonp` returns JSON response
901   * support non-string `path` in `app.use(path, fn)`
902     - supports array of paths
903     - supports `RegExp`
904   * router: fix optimization on router exit
905   * router: refactor location of `try` blocks
906   * router: speed up standard `app.use(fn)`
907   * deps: debug@1.0.3
908     - Add support for multiple wildcards in namespaces
909   * deps: finalhandler@0.0.3
910     - deps: debug@1.0.3
911   * deps: methods@1.1.0
912     - add `CONNECT`
913   * deps: parseurl@~1.1.3
914     - faster parsing of href-only URLs
915   * deps: path-to-regexp@0.1.3
916   * deps: send@0.6.0
917     - deps: debug@1.0.3
918   * deps: serve-static@~1.3.2
919     - deps: parseurl@~1.1.3
920     - deps: send@0.6.0
921   * perf: fix arguments reassign deopt in some `res` methods
923 4.5.1 / 2014-07-06
924 ==================
926  * fix routing regression when altering `req.method`
928 4.5.0 / 2014-07-04
929 ==================
931  * add deprecation message to non-plural `req.accepts*`
932  * add deprecation message to `res.send(body, status)`
933  * add deprecation message to `res.vary()`
934  * add `headers` option to `res.sendfile`
935    - use to set headers on successful file transfer
936  * add `mergeParams` option to `Router`
937    - merges `req.params` from parent routes
938  * add `req.hostname` -- correct name for what `req.host` returns
939  * deprecate things with `depd` module
940  * deprecate `req.host` -- use `req.hostname` instead
941  * fix behavior when handling request without routes
942  * fix handling when `route.all` is only route
943  * invoke `router.param()` only when route matches
944  * restore `req.params` after invoking router
945  * use `finalhandler` for final response handling
946  * use `media-typer` to alter content-type charset
947  * deps: accepts@~1.0.7
948  * deps: send@0.5.0
949    - Accept string for `maxage` (converted by `ms`)
950    - Include link in default redirect response
951  * deps: serve-static@~1.3.0
952    - Accept string for `maxAge` (converted by `ms`)
953    - Add `setHeaders` option
954    - Include HTML link in redirect response
955    - deps: send@0.5.0
956  * deps: type-is@~1.3.2
958 4.4.5 / 2014-06-26
959 ==================
961  * deps: cookie-signature@1.0.4
962    - fix for timing attacks
964 4.4.4 / 2014-06-20
965 ==================
967  * fix `res.attachment` Unicode filenames in Safari
968  * fix "trim prefix" debug message in `express:router`
969  * deps: accepts@~1.0.5
970  * deps: buffer-crc32@0.2.3
972 4.4.3 / 2014-06-11
973 ==================
975  * fix persistence of modified `req.params[name]` from `app.param()`
976  * deps: accepts@1.0.3
977    - deps: negotiator@0.4.6
978  * deps: debug@1.0.2
979  * deps: send@0.4.3
980    - Do not throw un-catchable error on file open race condition
981    - Use `escape-html` for HTML escaping
982    - deps: debug@1.0.2
983    - deps: finished@1.2.2
984    - deps: fresh@0.2.2
985  * deps: serve-static@1.2.3
986    - Do not throw un-catchable error on file open race condition
987    - deps: send@0.4.3
989 4.4.2 / 2014-06-09
990 ==================
992  * fix catching errors from top-level handlers
993  * use `vary` module for `res.vary`
994  * deps: debug@1.0.1
995  * deps: proxy-addr@1.0.1
996  * deps: send@0.4.2
997    - fix "event emitter leak" warnings
998    - deps: debug@1.0.1
999    - deps: finished@1.2.1
1000  * deps: serve-static@1.2.2
1001    - fix "event emitter leak" warnings
1002    - deps: send@0.4.2
1003  * deps: type-is@1.2.1
1005 4.4.1 / 2014-06-02
1006 ==================
1008  * deps: methods@1.0.1
1009  * deps: send@0.4.1
1010    - Send `max-age` in `Cache-Control` in correct format
1011  * deps: serve-static@1.2.1
1012    - use `escape-html` for escaping
1013    - deps: send@0.4.1
1015 4.4.0 / 2014-05-30
1016 ==================
1018  * custom etag control with `app.set('etag', val)`
1019    - `app.set('etag', function(body, encoding){ return '"etag"' })` custom etag generation
1020    - `app.set('etag', 'weak')` weak tag
1021    - `app.set('etag', 'strong')` strong etag
1022    - `app.set('etag', false)` turn off
1023    - `app.set('etag', true)` standard etag
1024  * mark `res.send` ETag as weak and reduce collisions
1025  * update accepts to 1.0.2
1026    - Fix interpretation when header not in request
1027  * update send to 0.4.0
1028    - Calculate ETag with md5 for reduced collisions
1029    - Ignore stream errors after request ends
1030    - deps: debug@0.8.1
1031  * update serve-static to 1.2.0
1032    - Calculate ETag with md5 for reduced collisions
1033    - Ignore stream errors after request ends
1034    - deps: send@0.4.0
1036 4.3.2 / 2014-05-28
1037 ==================
1039  * fix handling of errors from `router.param()` callbacks
1041 4.3.1 / 2014-05-23
1042 ==================
1044  * revert "fix behavior of multiple `app.VERB` for the same path"
1045    - this caused a regression in the order of route execution
1047 4.3.0 / 2014-05-21
1048 ==================
1050  * add `req.baseUrl` to access the path stripped from `req.url` in routes
1051  * fix behavior of multiple `app.VERB` for the same path
1052  * fix issue routing requests among sub routers
1053  * invoke `router.param()` only when necessary instead of every match
1054  * proper proxy trust with `app.set('trust proxy', trust)`
1055    - `app.set('trust proxy', 1)` trust first hop
1056    - `app.set('trust proxy', 'loopback')` trust loopback addresses
1057    - `app.set('trust proxy', '10.0.0.1')` trust single IP
1058    - `app.set('trust proxy', '10.0.0.1/16')` trust subnet
1059    - `app.set('trust proxy', '10.0.0.1, 10.0.0.2')` trust list
1060    - `app.set('trust proxy', false)` turn off
1061    - `app.set('trust proxy', true)` trust everything
1062  * set proper `charset` in `Content-Type` for `res.send`
1063  * update type-is to 1.2.0
1064    - support suffix matching
1066 4.2.0 / 2014-05-11
1067 ==================
1069  * deprecate `app.del()` -- use `app.delete()` instead
1070  * deprecate `res.json(obj, status)` -- use `res.json(status, obj)` instead
1071    - the edge-case `res.json(status, num)` requires `res.status(status).json(num)`
1072  * deprecate `res.jsonp(obj, status)` -- use `res.jsonp(status, obj)` instead
1073    - the edge-case `res.jsonp(status, num)` requires `res.status(status).jsonp(num)`
1074  * fix `req.next` when inside router instance
1075  * include `ETag` header in `HEAD` requests
1076  * keep previous `Content-Type` for `res.jsonp`
1077  * support PURGE method
1078    - add `app.purge`
1079    - add `router.purge`
1080    - include PURGE in `app.all`
1081  * update debug to 0.8.0
1082    - add `enable()` method
1083    - change from stderr to stdout
1084  * update methods to 1.0.0
1085    - add PURGE
1087 4.1.2 / 2014-05-08
1088 ==================
1090  * fix `req.host` for IPv6 literals
1091  * fix `res.jsonp` error if callback param is object
1093 4.1.1 / 2014-04-27
1094 ==================
1096  * fix package.json to reflect supported node version
1098 4.1.0 / 2014-04-24
1099 ==================
1101  * pass options from `res.sendfile` to `send`
1102  * preserve casing of headers in `res.header` and `res.set`
1103  * support unicode file names in `res.attachment` and `res.download`
1104  * update accepts to 1.0.1
1105    - deps: negotiator@0.4.0
1106  * update cookie to 0.1.2
1107    - Fix for maxAge == 0
1108    - made compat with expires field
1109  * update send to 0.3.0
1110    - Accept API options in options object
1111    - Coerce option types
1112    - Control whether to generate etags
1113    - Default directory access to 403 when index disabled
1114    - Fix sending files with dots without root set
1115    - Include file path in etag
1116    - Make "Can't set headers after they are sent." catchable
1117    - Send full entity-body for multi range requests
1118    - Set etags to "weak"
1119    - Support "If-Range" header
1120    - Support multiple index paths
1121    - deps: mime@1.2.11
1122  * update serve-static to 1.1.0
1123    - Accept options directly to `send` module
1124    - Resolve relative paths at middleware setup
1125    - Use parseurl to parse the URL from request
1126    - deps: send@0.3.0
1127  * update type-is to 1.1.0
1128    - add non-array values support
1129    - add `multipart` as a shorthand
1131 4.0.0 / 2014-04-09
1132 ==================
1134  * remove:
1135    - node 0.8 support
1136    - connect and connect's patches except for charset handling
1137    - express(1) - moved to [express-generator](https://github.com/expressjs/generator)
1138    - `express.createServer()` - it has been deprecated for a long time. Use `express()`
1139    - `app.configure` - use logic in your own app code
1140    - `app.router` - is removed
1141    - `req.auth` - use `basic-auth` instead
1142    - `req.accepted*` - use `req.accepts*()` instead
1143    - `res.location` - relative URL resolution is removed
1144    - `res.charset` - include the charset in the content type when using `res.set()`
1145    - all bundled middleware except `static`
1146  * change:
1147    - `app.route` -> `app.mountpath` when mounting an express app in another express app
1148    - `json spaces` no longer enabled by default in development
1149    - `req.accepts*` -> `req.accepts*s` - i.e. `req.acceptsEncoding` -> `req.acceptsEncodings`
1150    - `req.params` is now an object instead of an array
1151    - `res.locals` is no longer a function. It is a plain js object. Treat it as such.
1152    - `res.headerSent` -> `res.headersSent` to match node.js ServerResponse object
1153  * refactor:
1154    - `req.accepts*` with [accepts](https://github.com/expressjs/accepts)
1155    - `req.is` with [type-is](https://github.com/expressjs/type-is)
1156    - [path-to-regexp](https://github.com/component/path-to-regexp)
1157  * add:
1158    - `app.router()` - returns the app Router instance
1159    - `app.route()` - Proxy to the app's `Router#route()` method to create a new route
1160    - Router & Route - public API
1162 3.21.2 / 2015-07-31
1163 ===================
1165   * deps: connect@2.30.2
1166     - deps: body-parser@~1.13.3
1167     - deps: compression@~1.5.2
1168     - deps: errorhandler@~1.4.2
1169     - deps: method-override@~2.3.5
1170     - deps: serve-index@~1.7.2
1171     - deps: type-is@~1.6.6
1172     - deps: vhost@~3.0.1
1173   * deps: vary@~1.0.1
1174     - Fix setting empty header from empty `field`
1175     - perf: enable strict mode
1176     - perf: remove argument reassignments
1178 3.21.1 / 2015-07-05
1179 ===================
1181   * deps: basic-auth@~1.0.3
1182   * deps: connect@2.30.1
1183     - deps: body-parser@~1.13.2
1184     - deps: compression@~1.5.1
1185     - deps: errorhandler@~1.4.1
1186     - deps: morgan@~1.6.1
1187     - deps: pause@0.1.0
1188     - deps: qs@4.0.0
1189     - deps: serve-index@~1.7.1
1190     - deps: type-is@~1.6.4
1192 3.21.0 / 2015-06-18
1193 ===================
1195   * deps: basic-auth@1.0.2
1196     - perf: enable strict mode
1197     - perf: hoist regular expression
1198     - perf: parse with regular expressions
1199     - perf: remove argument reassignment
1200   * deps: connect@2.30.0
1201     - deps: body-parser@~1.13.1
1202     - deps: bytes@2.1.0
1203     - deps: compression@~1.5.0
1204     - deps: cookie@0.1.3
1205     - deps: cookie-parser@~1.3.5
1206     - deps: csurf@~1.8.3
1207     - deps: errorhandler@~1.4.0
1208     - deps: express-session@~1.11.3
1209     - deps: finalhandler@0.4.0
1210     - deps: fresh@0.3.0
1211     - deps: morgan@~1.6.0
1212     - deps: serve-favicon@~2.3.0
1213     - deps: serve-index@~1.7.0
1214     - deps: serve-static@~1.10.0
1215     - deps: type-is@~1.6.3
1216   * deps: cookie@0.1.3
1217     - perf: deduce the scope of try-catch deopt
1218     - perf: remove argument reassignments
1219   * deps: escape-html@1.0.2
1220   * deps: etag@~1.7.0
1221     - Always include entity length in ETags for hash length extensions
1222     - Generate non-Stats ETags using MD5 only (no longer CRC32)
1223     - Improve stat performance by removing hashing
1224     - Improve support for JXcore
1225     - Remove base64 padding in ETags to shorten
1226     - Support "fake" stats objects in environments without fs
1227     - Use MD5 instead of MD4 in weak ETags over 1KB
1228   * deps: fresh@0.3.0
1229     - Add weak `ETag` matching support
1230   * deps: mkdirp@0.5.1
1231     - Work in global strict mode
1232   * deps: send@0.13.0
1233     - Allow Node.js HTTP server to set `Date` response header
1234     - Fix incorrectly removing `Content-Location` on 304 response
1235     - Improve the default redirect response headers
1236     - Send appropriate headers on default error response
1237     - Use `http-errors` for standard emitted errors
1238     - Use `statuses` instead of `http` module for status messages
1239     - deps: escape-html@1.0.2
1240     - deps: etag@~1.7.0
1241     - deps: fresh@0.3.0
1242     - deps: on-finished@~2.3.0
1243     - perf: enable strict mode
1244     - perf: remove unnecessary array allocations
1246 3.20.3 / 2015-05-17
1247 ===================
1249   * deps: connect@2.29.2
1250     - deps: body-parser@~1.12.4
1251     - deps: compression@~1.4.4
1252     - deps: connect-timeout@~1.6.2
1253     - deps: debug@~2.2.0
1254     - deps: depd@~1.0.1
1255     - deps: errorhandler@~1.3.6
1256     - deps: finalhandler@0.3.6
1257     - deps: method-override@~2.3.3
1258     - deps: morgan@~1.5.3
1259     - deps: qs@2.4.2
1260     - deps: response-time@~2.3.1
1261     - deps: serve-favicon@~2.2.1
1262     - deps: serve-index@~1.6.4
1263     - deps: serve-static@~1.9.3
1264     - deps: type-is@~1.6.2
1265   * deps: debug@~2.2.0
1266     - deps: ms@0.7.1
1267   * deps: depd@~1.0.1
1268   * deps: proxy-addr@~1.0.8
1269     - deps: ipaddr.js@1.0.1
1270   * deps: send@0.12.3
1271     - deps: debug@~2.2.0
1272     - deps: depd@~1.0.1
1273     - deps: etag@~1.6.0
1274     - deps: ms@0.7.1
1275     - deps: on-finished@~2.2.1
1277 3.20.2 / 2015-03-16
1278 ===================
1280   * deps: connect@2.29.1
1281     - deps: body-parser@~1.12.2
1282     - deps: compression@~1.4.3
1283     - deps: connect-timeout@~1.6.1
1284     - deps: debug@~2.1.3
1285     - deps: errorhandler@~1.3.5
1286     - deps: express-session@~1.10.4
1287     - deps: finalhandler@0.3.4
1288     - deps: method-override@~2.3.2
1289     - deps: morgan@~1.5.2
1290     - deps: qs@2.4.1
1291     - deps: serve-index@~1.6.3
1292     - deps: serve-static@~1.9.2
1293     - deps: type-is@~1.6.1
1294   * deps: debug@~2.1.3
1295     - Fix high intensity foreground color for bold
1296     - deps: ms@0.7.0
1297   * deps: merge-descriptors@1.0.0
1298   * deps: proxy-addr@~1.0.7
1299     - deps: ipaddr.js@0.1.9
1300   * deps: send@0.12.2
1301     - Throw errors early for invalid `extensions` or `index` options
1302     - deps: debug@~2.1.3
1304 3.20.1 / 2015-02-28
1305 ===================
1307   * Fix `req.host` when using "trust proxy" hops count
1308   * Fix `req.protocol`/`req.secure` when using "trust proxy" hops count
1310 3.20.0 / 2015-02-18
1311 ===================
1313   * Fix `"trust proxy"` setting to inherit when app is mounted
1314   * Generate `ETag`s for all request responses
1315     - No longer restricted to only responses for `GET` and `HEAD` requests
1316   * Use `content-type` to parse `Content-Type` headers
1317   * deps: connect@2.29.0
1318     - Use `content-type` to parse `Content-Type` headers
1319     - deps: body-parser@~1.12.0
1320     - deps: compression@~1.4.1
1321     - deps: connect-timeout@~1.6.0
1322     - deps: cookie-parser@~1.3.4
1323     - deps: cookie-signature@1.0.6
1324     - deps: csurf@~1.7.0
1325     - deps: errorhandler@~1.3.4
1326     - deps: express-session@~1.10.3
1327     - deps: http-errors@~1.3.1
1328     - deps: response-time@~2.3.0
1329     - deps: serve-index@~1.6.2
1330     - deps: serve-static@~1.9.1
1331     - deps: type-is@~1.6.0
1332   * deps: cookie-signature@1.0.6
1333   * deps: send@0.12.1
1334     - Always read the stat size from the file
1335     - Fix mutating passed-in `options`
1336     - deps: mime@1.3.4
1338 3.19.2 / 2015-02-01
1339 ===================
1341   * deps: connect@2.28.3
1342     - deps: compression@~1.3.1
1343     - deps: csurf@~1.6.6
1344     - deps: errorhandler@~1.3.3
1345     - deps: express-session@~1.10.2
1346     - deps: serve-index@~1.6.1
1347     - deps: type-is@~1.5.6
1348   * deps: proxy-addr@~1.0.6
1349     - deps: ipaddr.js@0.1.8
1351 3.19.1 / 2015-01-20
1352 ===================
1354   * deps: connect@2.28.2
1355     - deps: body-parser@~1.10.2
1356     - deps: serve-static@~1.8.1
1357   * deps: send@0.11.1
1358     - Fix root path disclosure
1360 3.19.0 / 2015-01-09
1361 ===================
1363   * Fix `OPTIONS` responses to include the `HEAD` method property
1364   * Use `readline` for prompt in `express(1)`
1365   * deps: commander@2.6.0
1366   * deps: connect@2.28.1
1367     - deps: body-parser@~1.10.1
1368     - deps: compression@~1.3.0
1369     - deps: connect-timeout@~1.5.0
1370     - deps: csurf@~1.6.4
1371     - deps: debug@~2.1.1
1372     - deps: errorhandler@~1.3.2
1373     - deps: express-session@~1.10.1
1374     - deps: finalhandler@0.3.3
1375     - deps: method-override@~2.3.1
1376     - deps: morgan@~1.5.1
1377     - deps: serve-favicon@~2.2.0
1378     - deps: serve-index@~1.6.0
1379     - deps: serve-static@~1.8.0
1380     - deps: type-is@~1.5.5
1381   * deps: debug@~2.1.1
1382   * deps: methods@~1.1.1
1383   * deps: proxy-addr@~1.0.5
1384     - deps: ipaddr.js@0.1.6
1385   * deps: send@0.11.0
1386     - deps: debug@~2.1.1
1387     - deps: etag@~1.5.1
1388     - deps: ms@0.7.0
1389     - deps: on-finished@~2.2.0
1391 3.18.6 / 2014-12-12
1392 ===================
1394   * Fix exception in `req.fresh`/`req.stale` without response headers
1396 3.18.5 / 2014-12-11
1397 ===================
1399   * deps: connect@2.27.6
1400     - deps: compression@~1.2.2
1401     - deps: express-session@~1.9.3
1402     - deps: http-errors@~1.2.8
1403     - deps: serve-index@~1.5.3
1404     - deps: type-is@~1.5.4
1406 3.18.4 / 2014-11-23
1407 ===================
1409   * deps: connect@2.27.4
1410     - deps: body-parser@~1.9.3
1411     - deps: compression@~1.2.1
1412     - deps: errorhandler@~1.2.3
1413     - deps: express-session@~1.9.2
1414     - deps: qs@2.3.3
1415     - deps: serve-favicon@~2.1.7
1416     - deps: serve-static@~1.5.1
1417     - deps: type-is@~1.5.3
1418   * deps: etag@~1.5.1
1419   * deps: proxy-addr@~1.0.4
1420     - deps: ipaddr.js@0.1.5
1422 3.18.3 / 2014-11-09
1423 ===================
1425   * deps: connect@2.27.3
1426     - Correctly invoke async callback asynchronously
1427     - deps: csurf@~1.6.3
1429 3.18.2 / 2014-10-28
1430 ===================
1432   * deps: connect@2.27.2
1433     - Fix handling of URLs containing `://` in the path
1434     - deps: body-parser@~1.9.2
1435     - deps: qs@2.3.2
1437 3.18.1 / 2014-10-22
1438 ===================
1440   * Fix internal `utils.merge` deprecation warnings
1441   * deps: connect@2.27.1
1442     - deps: body-parser@~1.9.1
1443     - deps: express-session@~1.9.1
1444     - deps: finalhandler@0.3.2
1445     - deps: morgan@~1.4.1
1446     - deps: qs@2.3.0
1447     - deps: serve-static@~1.7.1
1448   * deps: send@0.10.1
1449     - deps: on-finished@~2.1.1
1451 3.18.0 / 2014-10-17
1452 ===================
1454   * Use `content-disposition` module for `res.attachment`/`res.download`
1455     - Sends standards-compliant `Content-Disposition` header
1456     - Full Unicode support
1457   * Use `etag` module to generate `ETag` headers
1458   * deps: connect@2.27.0
1459     - Use `http-errors` module for creating errors
1460     - Use `utils-merge` module for merging objects
1461     - deps: body-parser@~1.9.0
1462     - deps: compression@~1.2.0
1463     - deps: connect-timeout@~1.4.0
1464     - deps: debug@~2.1.0
1465     - deps: depd@~1.0.0
1466     - deps: express-session@~1.9.0
1467     - deps: finalhandler@0.3.1
1468     - deps: method-override@~2.3.0
1469     - deps: morgan@~1.4.0
1470     - deps: response-time@~2.2.0
1471     - deps: serve-favicon@~2.1.6
1472     - deps: serve-index@~1.5.0
1473     - deps: serve-static@~1.7.0
1474   * deps: debug@~2.1.0
1475     - Implement `DEBUG_FD` env variable support
1476   * deps: depd@~1.0.0
1477   * deps: send@0.10.0
1478     - deps: debug@~2.1.0
1479     - deps: depd@~1.0.0
1480     - deps: etag@~1.5.0
1482 3.17.8 / 2014-10-15
1483 ===================
1485   * deps: connect@2.26.6
1486     - deps: compression@~1.1.2
1487     - deps: csurf@~1.6.2
1488     - deps: errorhandler@~1.2.2
1490 3.17.7 / 2014-10-08
1491 ===================
1493   * deps: connect@2.26.5
1494     - Fix accepting non-object arguments to `logger`
1495     - deps: serve-static@~1.6.4
1497 3.17.6 / 2014-10-02
1498 ===================
1500   * deps: connect@2.26.4
1501     - deps: morgan@~1.3.2
1502     - deps: type-is@~1.5.2
1504 3.17.5 / 2014-09-24
1505 ===================
1507   * deps: connect@2.26.3
1508     - deps: body-parser@~1.8.4
1509     - deps: serve-favicon@~2.1.5
1510     - deps: serve-static@~1.6.3
1511   * deps: proxy-addr@~1.0.3
1512     - Use `forwarded` npm module
1513   * deps: send@0.9.3
1514     - deps: etag@~1.4.0
1516 3.17.4 / 2014-09-19
1517 ===================
1519   * deps: connect@2.26.2
1520     - deps: body-parser@~1.8.3
1521     - deps: qs@2.2.4
1523 3.17.3 / 2014-09-18
1524 ===================
1526   * deps: proxy-addr@~1.0.2
1527     - Fix a global leak when multiple subnets are trusted
1528     - deps: ipaddr.js@0.1.3
1530 3.17.2 / 2014-09-15
1531 ===================
1533   * Use `crc` instead of `buffer-crc32` for speed
1534   * deps: connect@2.26.1
1535     - deps: body-parser@~1.8.2
1536     - deps: depd@0.4.5
1537     - deps: express-session@~1.8.2
1538     - deps: morgan@~1.3.1
1539     - deps: serve-favicon@~2.1.3
1540     - deps: serve-static@~1.6.2
1541   * deps: depd@0.4.5
1542   * deps: send@0.9.2
1543     - deps: depd@0.4.5
1544     - deps: etag@~1.3.1
1545     - deps: range-parser@~1.0.2
1547 3.17.1 / 2014-09-08
1548 ===================
1550   * Fix error in `req.subdomains` on empty host
1552 3.17.0 / 2014-09-08
1553 ===================
1555   * Support `X-Forwarded-Host` in `req.subdomains`
1556   * Support IP address host in `req.subdomains`
1557   * deps: connect@2.26.0
1558     - deps: body-parser@~1.8.1
1559     - deps: compression@~1.1.0
1560     - deps: connect-timeout@~1.3.0
1561     - deps: cookie-parser@~1.3.3
1562     - deps: cookie-signature@1.0.5
1563     - deps: csurf@~1.6.1
1564     - deps: debug@~2.0.0
1565     - deps: errorhandler@~1.2.0
1566     - deps: express-session@~1.8.1
1567     - deps: finalhandler@0.2.0
1568     - deps: fresh@0.2.4
1569     - deps: media-typer@0.3.0
1570     - deps: method-override@~2.2.0
1571     - deps: morgan@~1.3.0
1572     - deps: qs@2.2.3
1573     - deps: serve-favicon@~2.1.3
1574     - deps: serve-index@~1.2.1
1575     - deps: serve-static@~1.6.1
1576     - deps: type-is@~1.5.1
1577     - deps: vhost@~3.0.0
1578   * deps: cookie-signature@1.0.5
1579   * deps: debug@~2.0.0
1580   * deps: fresh@0.2.4
1581   * deps: media-typer@0.3.0
1582     - Throw error when parameter format invalid on parse
1583   * deps: range-parser@~1.0.2
1584   * deps: send@0.9.1
1585     - Add `lastModified` option
1586     - Use `etag` to generate `ETag` header
1587     - deps: debug@~2.0.0
1588     - deps: fresh@0.2.4
1589   * deps: vary@~1.0.0
1590     - Accept valid `Vary` header string as `field`
1592 3.16.10 / 2014-09-04
1593 ====================
1595   * deps: connect@2.25.10
1596     - deps: serve-static@~1.5.4
1597   * deps: send@0.8.5
1598     - Fix a path traversal issue when using `root`
1599     - Fix malicious path detection for empty string path
1601 3.16.9 / 2014-08-29
1602 ===================
1604   * deps: connect@2.25.9
1605     - deps: body-parser@~1.6.7
1606     - deps: qs@2.2.2
1608 3.16.8 / 2014-08-27
1609 ===================
1611   * deps: connect@2.25.8
1612     - deps: body-parser@~1.6.6
1613     - deps: csurf@~1.4.1
1614     - deps: qs@2.2.0
1616 3.16.7 / 2014-08-18
1617 ===================
1619   * deps: connect@2.25.7
1620     - deps: body-parser@~1.6.5
1621     - deps: express-session@~1.7.6
1622     - deps: morgan@~1.2.3
1623     - deps: serve-static@~1.5.3
1624   * deps: send@0.8.3
1625     - deps: destroy@1.0.3
1626     - deps: on-finished@2.1.0
1628 3.16.6 / 2014-08-14
1629 ===================
1631   * deps: connect@2.25.6
1632     - deps: body-parser@~1.6.4
1633     - deps: qs@1.2.2
1634     - deps: serve-static@~1.5.2
1635   * deps: send@0.8.2
1636     - Work around `fd` leak in Node.js 0.10 for `fs.ReadStream`
1638 3.16.5 / 2014-08-11
1639 ===================
1641   * deps: connect@2.25.5
1642     - Fix backwards compatibility in `logger`
1644 3.16.4 / 2014-08-10
1645 ===================
1647   * Fix original URL parsing in `res.location`
1648   * deps: connect@2.25.4
1649     - Fix `query` middleware breaking with argument
1650     - deps: body-parser@~1.6.3
1651     - deps: compression@~1.0.11
1652     - deps: connect-timeout@~1.2.2
1653     - deps: express-session@~1.7.5
1654     - deps: method-override@~2.1.3
1655     - deps: on-headers@~1.0.0
1656     - deps: parseurl@~1.3.0
1657     - deps: qs@1.2.1
1658     - deps: response-time@~2.0.1
1659     - deps: serve-index@~1.1.6
1660     - deps: serve-static@~1.5.1
1661   * deps: parseurl@~1.3.0
1663 3.16.3 / 2014-08-07
1664 ===================
1666   * deps: connect@2.25.3
1667     - deps: multiparty@3.3.2
1669 3.16.2 / 2014-08-07
1670 ===================
1672   * deps: connect@2.25.2
1673     - deps: body-parser@~1.6.2
1674     - deps: qs@1.2.0
1676 3.16.1 / 2014-08-06
1677 ===================
1679   * deps: connect@2.25.1
1680     - deps: body-parser@~1.6.1
1681     - deps: qs@1.1.0
1683 3.16.0 / 2014-08-05
1684 ===================
1686   * deps: connect@2.25.0
1687     - deps: body-parser@~1.6.0
1688     - deps: compression@~1.0.10
1689     - deps: csurf@~1.4.0
1690     - deps: express-session@~1.7.4
1691     - deps: qs@1.0.2
1692     - deps: serve-static@~1.5.0
1693   * deps: send@0.8.1
1694     - Add `extensions` option
1696 3.15.3 / 2014-08-04
1697 ===================
1699   * fix `res.sendfile` regression for serving directory index files
1700   * deps: connect@2.24.3
1701     - deps: serve-index@~1.1.5
1702     - deps: serve-static@~1.4.4
1703   * deps: send@0.7.4
1704     - Fix incorrect 403 on Windows and Node.js 0.11
1705     - Fix serving index files without root dir
1707 3.15.2 / 2014-07-27
1708 ===================
1710   * deps: connect@2.24.2
1711     - deps: body-parser@~1.5.2
1712     - deps: depd@0.4.4
1713     - deps: express-session@~1.7.2
1714     - deps: morgan@~1.2.2
1715     - deps: serve-static@~1.4.2
1716   * deps: depd@0.4.4
1717     - Work-around v8 generating empty stack traces
1718   * deps: send@0.7.2
1719     - deps: depd@0.4.4
1721 3.15.1 / 2014-07-26
1722 ===================
1724   * deps: connect@2.24.1
1725     - deps: body-parser@~1.5.1
1726     - deps: depd@0.4.3
1727     - deps: express-session@~1.7.1
1728     - deps: morgan@~1.2.1
1729     - deps: serve-index@~1.1.4
1730     - deps: serve-static@~1.4.1
1731   * deps: depd@0.4.3
1732     - Fix exception when global `Error.stackTraceLimit` is too low
1733   * deps: send@0.7.1
1734     - deps: depd@0.4.3
1736 3.15.0 / 2014-07-22
1737 ===================
1739   * Fix `req.protocol` for proxy-direct connections
1740   * Pass options from `res.sendfile` to `send`
1741   * deps: connect@2.24.0
1742     - deps: body-parser@~1.5.0
1743     - deps: compression@~1.0.9
1744     - deps: connect-timeout@~1.2.1
1745     - deps: debug@1.0.4
1746     - deps: depd@0.4.2
1747     - deps: express-session@~1.7.0
1748     - deps: finalhandler@0.1.0
1749     - deps: method-override@~2.1.2
1750     - deps: morgan@~1.2.0
1751     - deps: multiparty@3.3.1
1752     - deps: parseurl@~1.2.0
1753     - deps: serve-static@~1.4.0
1754   * deps: debug@1.0.4
1755   * deps: depd@0.4.2
1756     - Add `TRACE_DEPRECATION` environment variable
1757     - Remove non-standard grey color from color output
1758     - Support `--no-deprecation` argument
1759     - Support `--trace-deprecation` argument
1760   * deps: parseurl@~1.2.0
1761     - Cache URLs based on original value
1762     - Remove no-longer-needed URL mis-parse work-around
1763     - Simplify the "fast-path" `RegExp`
1764   * deps: send@0.7.0
1765     - Add `dotfiles` option
1766     - Cap `maxAge` value to 1 year
1767     - deps: debug@1.0.4
1768     - deps: depd@0.4.2
1770 3.14.0 / 2014-07-11
1771 ===================
1773  * add explicit "Rosetta Flash JSONP abuse" protection
1774    - previous versions are not vulnerable; this is just explicit protection
1775  * deprecate `res.redirect(url, status)` -- use `res.redirect(status, url)` instead
1776  * fix `res.send(status, num)` to send `num` as json (not error)
1777  * remove unnecessary escaping when `res.jsonp` returns JSON response
1778  * deps: basic-auth@1.0.0
1779    - support empty password
1780    - support empty username
1781  * deps: connect@2.23.0
1782    - deps: debug@1.0.3
1783    - deps: express-session@~1.6.4
1784    - deps: method-override@~2.1.0
1785    - deps: parseurl@~1.1.3
1786    - deps: serve-static@~1.3.1
1787   * deps: debug@1.0.3
1788     - Add support for multiple wildcards in namespaces
1789   * deps: methods@1.1.0
1790     - add `CONNECT`
1791   * deps: parseurl@~1.1.3
1792     - faster parsing of href-only URLs
1794 3.13.0 / 2014-07-03
1795 ===================
1797  * add deprecation message to `app.configure`
1798  * add deprecation message to `req.auth`
1799  * use `basic-auth` to parse `Authorization` header
1800  * deps: connect@2.22.0
1801    - deps: csurf@~1.3.0
1802    - deps: express-session@~1.6.1
1803    - deps: multiparty@3.3.0
1804    - deps: serve-static@~1.3.0
1805  * deps: send@0.5.0
1806    - Accept string for `maxage` (converted by `ms`)
1807    - Include link in default redirect response
1809 3.12.1 / 2014-06-26
1810 ===================
1812  * deps: connect@2.21.1
1813    - deps: cookie-parser@1.3.2
1814    - deps: cookie-signature@1.0.4
1815    - deps: express-session@~1.5.2
1816    - deps: type-is@~1.3.2
1817  * deps: cookie-signature@1.0.4
1818    - fix for timing attacks
1820 3.12.0 / 2014-06-21
1821 ===================
1823  * use `media-typer` to alter content-type charset
1824  * deps: connect@2.21.0
1825    - deprecate `connect(middleware)` -- use `app.use(middleware)` instead
1826    - deprecate `connect.createServer()` -- use `connect()` instead
1827    - fix `res.setHeader()` patch to work with with get -> append -> set pattern
1828    - deps: compression@~1.0.8
1829    - deps: errorhandler@~1.1.1
1830    - deps: express-session@~1.5.0
1831    - deps: serve-index@~1.1.3
1833 3.11.0 / 2014-06-19
1834 ===================
1836  * deprecate things with `depd` module
1837  * deps: buffer-crc32@0.2.3
1838  * deps: connect@2.20.2
1839    - deprecate `verify` option to `json` -- use `body-parser` npm module instead
1840    - deprecate `verify` option to `urlencoded` -- use `body-parser` npm module instead
1841    - deprecate things with `depd` module
1842    - use `finalhandler` for final response handling
1843    - use `media-typer` to parse `content-type` for charset
1844    - deps: body-parser@1.4.3
1845    - deps: connect-timeout@1.1.1
1846    - deps: cookie-parser@1.3.1
1847    - deps: csurf@1.2.2
1848    - deps: errorhandler@1.1.0
1849    - deps: express-session@1.4.0
1850    - deps: multiparty@3.2.9
1851    - deps: serve-index@1.1.2
1852    - deps: type-is@1.3.1
1853    - deps: vhost@2.0.0
1855 3.10.5 / 2014-06-11
1856 ===================
1858  * deps: connect@2.19.6
1859    - deps: body-parser@1.3.1
1860    - deps: compression@1.0.7
1861    - deps: debug@1.0.2
1862    - deps: serve-index@1.1.1
1863    - deps: serve-static@1.2.3
1864  * deps: debug@1.0.2
1865  * deps: send@0.4.3
1866    - Do not throw un-catchable error on file open race condition
1867    - Use `escape-html` for HTML escaping
1868    - deps: debug@1.0.2
1869    - deps: finished@1.2.2
1870    - deps: fresh@0.2.2
1872 3.10.4 / 2014-06-09
1873 ===================
1875  * deps: connect@2.19.5
1876    - fix "event emitter leak" warnings
1877    - deps: csurf@1.2.1
1878    - deps: debug@1.0.1
1879    - deps: serve-static@1.2.2
1880    - deps: type-is@1.2.1
1881  * deps: debug@1.0.1
1882  * deps: send@0.4.2
1883    - fix "event emitter leak" warnings
1884    - deps: finished@1.2.1
1885    - deps: debug@1.0.1
1887 3.10.3 / 2014-06-05
1888 ===================
1890  * use `vary` module for `res.vary`
1891  * deps: connect@2.19.4
1892    - deps: errorhandler@1.0.2
1893    - deps: method-override@2.0.2
1894    - deps: serve-favicon@2.0.1
1895  * deps: debug@1.0.0
1897 3.10.2 / 2014-06-03
1898 ===================
1900  * deps: connect@2.19.3
1901    - deps: compression@1.0.6
1903 3.10.1 / 2014-06-03
1904 ===================
1906  * deps: connect@2.19.2
1907    - deps: compression@1.0.4
1908  * deps: proxy-addr@1.0.1
1910 3.10.0 / 2014-06-02
1911 ===================
1913  * deps: connect@2.19.1
1914    - deprecate `methodOverride()` -- use `method-override` npm module instead
1915    - deps: body-parser@1.3.0
1916    - deps: method-override@2.0.1
1917    - deps: multiparty@3.2.8
1918    - deps: response-time@2.0.0
1919    - deps: serve-static@1.2.1
1920  * deps: methods@1.0.1
1921  * deps: send@0.4.1
1922    - Send `max-age` in `Cache-Control` in correct format
1924 3.9.0 / 2014-05-30
1925 ==================
1927  * custom etag control with `app.set('etag', val)`
1928    - `app.set('etag', function(body, encoding){ return '"etag"' })` custom etag generation
1929    - `app.set('etag', 'weak')` weak tag
1930    - `app.set('etag', 'strong')` strong etag
1931    - `app.set('etag', false)` turn off
1932    - `app.set('etag', true)` standard etag
1933  * Include ETag in HEAD requests
1934  * mark `res.send` ETag as weak and reduce collisions
1935  * update connect to 2.18.0
1936    - deps: compression@1.0.3
1937    - deps: serve-index@1.1.0
1938    - deps: serve-static@1.2.0
1939  * update send to 0.4.0
1940    - Calculate ETag with md5 for reduced collisions
1941    - Ignore stream errors after request ends
1942    - deps: debug@0.8.1
1944 3.8.1 / 2014-05-27
1945 ==================
1947  * update connect to 2.17.3
1948    - deps: body-parser@1.2.2
1949    - deps: express-session@1.2.1
1950    - deps: method-override@1.0.2
1952 3.8.0 / 2014-05-21
1953 ==================
1955  * keep previous `Content-Type` for `res.jsonp`
1956  * set proper `charset` in `Content-Type` for `res.send`
1957  * update connect to 2.17.1
1958    - fix `res.charset` appending charset when `content-type` has one
1959    - deps: express-session@1.2.0
1960    - deps: morgan@1.1.1
1961    - deps: serve-index@1.0.3
1963 3.7.0 / 2014-05-18
1964 ==================
1966  * proper proxy trust with `app.set('trust proxy', trust)`
1967    - `app.set('trust proxy', 1)` trust first hop
1968    - `app.set('trust proxy', 'loopback')` trust loopback addresses
1969    - `app.set('trust proxy', '10.0.0.1')` trust single IP
1970    - `app.set('trust proxy', '10.0.0.1/16')` trust subnet
1971    - `app.set('trust proxy', '10.0.0.1, 10.0.0.2')` trust list
1972    - `app.set('trust proxy', false)` turn off
1973    - `app.set('trust proxy', true)` trust everything
1974  * update connect to 2.16.2
1975    - deprecate `res.headerSent` -- use `res.headersSent`
1976    - deprecate `res.on("header")` -- use on-headers module instead
1977    - fix edge-case in `res.appendHeader` that would append in wrong order
1978    - json: use body-parser
1979    - urlencoded: use body-parser
1980    - dep: bytes@1.0.0
1981    - dep: cookie-parser@1.1.0
1982    - dep: csurf@1.2.0
1983    - dep: express-session@1.1.0
1984    - dep: method-override@1.0.1
1986 3.6.0 / 2014-05-09
1987 ==================
1989  * deprecate `app.del()` -- use `app.delete()` instead
1990  * deprecate `res.json(obj, status)` -- use `res.json(status, obj)` instead
1991    - the edge-case `res.json(status, num)` requires `res.status(status).json(num)`
1992  * deprecate `res.jsonp(obj, status)` -- use `res.jsonp(status, obj)` instead
1993    - the edge-case `res.jsonp(status, num)` requires `res.status(status).jsonp(num)`
1994  * support PURGE method
1995    - add `app.purge`
1996    - add `router.purge`
1997    - include PURGE in `app.all`
1998  * update connect to 2.15.0
1999    * Add `res.appendHeader`
2000    * Call error stack even when response has been sent
2001    * Patch `res.headerSent` to return Boolean
2002    * Patch `res.headersSent` for node.js 0.8
2003    * Prevent default 404 handler after response sent
2004    * dep: compression@1.0.2
2005    * dep: connect-timeout@1.1.0
2006    * dep: debug@^0.8.0
2007    * dep: errorhandler@1.0.1
2008    * dep: express-session@1.0.4
2009    * dep: morgan@1.0.1
2010    * dep: serve-favicon@2.0.0
2011    * dep: serve-index@1.0.2
2012  * update debug to 0.8.0
2013    * add `enable()` method
2014    * change from stderr to stdout
2015  * update methods to 1.0.0
2016    - add PURGE
2017  * update mkdirp to 0.5.0
2019 3.5.3 / 2014-05-08
2020 ==================
2022  * fix `req.host` for IPv6 literals
2023  * fix `res.jsonp` error if callback param is object
2025 3.5.2 / 2014-04-24
2026 ==================
2028  * update connect to 2.14.5
2029  * update cookie to 0.1.2
2030  * update mkdirp to 0.4.0
2031  * update send to 0.3.0
2033 3.5.1 / 2014-03-25
2034 ==================
2036  * pin less-middleware in generated app
2038 3.5.0 / 2014-03-06
2039 ==================
2041  * bump deps
2043 3.4.8 / 2014-01-13
2044 ==================
2046  * prevent incorrect automatic OPTIONS responses #1868 @dpatti
2047  * update binary and examples for jade 1.0 #1876 @yossi, #1877 @reqshark, #1892 @matheusazzi
2048  * throw 400 in case of malformed paths @rlidwka
2050 3.4.7 / 2013-12-10
2051 ==================
2053  * update connect
2055 3.4.6 / 2013-12-01
2056 ==================
2058  * update connect (raw-body)
2060 3.4.5 / 2013-11-27
2061 ==================
2063  * update connect
2064  * res.location: remove leading ./ #1802 @kapouer
2065  * res.redirect: fix `res.redirect('toString') #1829 @michaelficarra
2066  * res.send: always send ETag when content-length > 0
2067  * router: add Router.all() method
2069 3.4.4 / 2013-10-29
2070 ==================
2072  * update connect
2073  * update supertest
2074  * update methods
2075  * express(1): replace bodyParser() with urlencoded() and json() #1795 @chirag04
2077 3.4.3 / 2013-10-23
2078 ==================
2080  * update connect
2082 3.4.2 / 2013-10-18
2083 ==================
2085  * update connect
2086  * downgrade commander
2088 3.4.1 / 2013-10-15
2089 ==================
2091  * update connect
2092  * update commander
2093  * jsonp: check if callback is a function
2094  * router: wrap encodeURIComponent in a try/catch #1735 (@lxe)
2095  * res.format: now includes charset @1747 (@sorribas)
2096  * res.links: allow multiple calls @1746 (@sorribas)
2098 3.4.0 / 2013-09-07
2099 ==================
2101  * add res.vary(). Closes #1682
2102  * update connect
2104 3.3.8 / 2013-09-02
2105 ==================
2107  * update connect
2109 3.3.7 / 2013-08-28
2110 ==================
2112  * update connect
2114 3.3.6 / 2013-08-27
2115 ==================
2117  * Revert "remove charset from json responses. Closes #1631" (causes issues in some clients)
2118  * add: req.accepts take an argument list
2120 3.3.4 / 2013-07-08
2121 ==================
2123  * update send and connect
2125 3.3.3 / 2013-07-04
2126 ==================
2128  * update connect
2130 3.3.2 / 2013-07-03
2131 ==================
2133  * update connect
2134  * update send
2135  * remove .version export
2137 3.3.1 / 2013-06-27
2138 ==================
2140  * update connect
2142 3.3.0 / 2013-06-26
2143 ==================
2145  * update connect
2146  * add support for multiple X-Forwarded-Proto values. Closes #1646
2147  * change: remove charset from json responses. Closes #1631
2148  * change: return actual booleans from req.accept* functions
2149  * fix jsonp callback array throw
2151 3.2.6 / 2013-06-02
2152 ==================
2154  * update connect
2156 3.2.5 / 2013-05-21
2157 ==================
2159  * update connect
2160  * update node-cookie
2161  * add: throw a meaningful error when there is no default engine
2162  * change generation of ETags with res.send() to GET requests only. Closes #1619
2164 3.2.4 / 2013-05-09
2165 ==================
2167   * fix `req.subdomains` when no Host is present
2168   * fix `req.host` when no Host is present, return undefined
2170 3.2.3 / 2013-05-07
2171 ==================
2173   * update connect / qs
2175 3.2.2 / 2013-05-03
2176 ==================
2178   * update qs
2180 3.2.1 / 2013-04-29
2181 ==================
2183   * add app.VERB() paths array deprecation warning
2184   * update connect
2185   * update qs and remove all ~ semver crap
2186   * fix: accept number as value of Signed Cookie
2188 3.2.0 / 2013-04-15
2189 ==================
2191   * add "view" constructor setting to override view behaviour
2192   * add req.acceptsEncoding(name)
2193   * add req.acceptedEncodings
2194   * revert cookie signature change causing session race conditions
2195   * fix sorting of Accept values of the same quality
2197 3.1.2 / 2013-04-12
2198 ==================
2200   * add support for custom Accept parameters
2201   * update cookie-signature
2203 3.1.1 / 2013-04-01
2204 ==================
2206   * add X-Forwarded-Host support to `req.host`
2207   * fix relative redirects
2208   * update mkdirp
2209   * update buffer-crc32
2210   * remove legacy app.configure() method from app template.
2212 3.1.0 / 2013-01-25
2213 ==================
2215   * add support for leading "." in "view engine" setting
2216   * add array support to `res.set()`
2217   * add node 0.8.x to travis.yml
2218   * add "subdomain offset" setting for tweaking `req.subdomains`
2219   * add `res.location(url)` implementing `res.redirect()`-like setting of Location
2220   * use app.get() for x-powered-by setting for inheritance
2221   * fix colons in passwords for `req.auth`
2223 3.0.6 / 2013-01-04
2224 ==================
2226   * add http verb methods to Router
2227   * update connect
2228   * fix mangling of the `res.cookie()` options object
2229   * fix jsonp whitespace escape. Closes #1132
2231 3.0.5 / 2012-12-19
2232 ==================
2234   * add throwing when a non-function is passed to a route
2235   * fix: explicitly remove Transfer-Encoding header from 204 and 304 responses
2236   * revert "add 'etag' option"
2238 3.0.4 / 2012-12-05
2239 ==================
2241   * add 'etag' option to disable `res.send()` Etags
2242   * add escaping of urls in text/plain in `res.redirect()`
2243     for old browsers interpreting as html
2244   * change crc32 module for a more liberal license
2245   * update connect
2247 3.0.3 / 2012-11-13
2248 ==================
2250   * update connect
2251   * update cookie module
2252   * fix cookie max-age
2254 3.0.2 / 2012-11-08
2255 ==================
2257   * add OPTIONS to cors example. Closes #1398
2258   * fix route chaining regression. Closes #1397
2260 3.0.1 / 2012-11-01
2261 ==================
2263   * update connect
2265 3.0.0 / 2012-10-23
2266 ==================
2268   * add `make clean`
2269   * add "Basic" check to req.auth
2270   * add `req.auth` test coverage
2271   * add cb && cb(payload) to `res.jsonp()`. Closes #1374
2272   * add backwards compat for `res.redirect()` status. Closes #1336
2273   * add support for `res.json()` to retain previously defined Content-Types. Closes #1349
2274   * update connect
2275   * change `res.redirect()` to utilize a pathname-relative Location again. Closes #1382
2276   * remove non-primitive string support for `res.send()`
2277   * fix view-locals example. Closes #1370
2278   * fix route-separation example
2280 3.0.0rc5 / 2012-09-18
2281 ==================
2283   * update connect
2284   * add redis search example
2285   * add static-files example
2286   * add "x-powered-by" setting (`app.disable('x-powered-by')`)
2287   * add "application/octet-stream" redirect Accept test case. Closes #1317
2289 3.0.0rc4 / 2012-08-30
2290 ==================
2292   * add `res.jsonp()`. Closes #1307
2293   * add "verbose errors" option to error-pages example
2294   * add another route example to express(1) so people are not so confused
2295   * add redis online user activity tracking example
2296   * update connect dep
2297   * fix etag quoting. Closes #1310
2298   * fix error-pages 404 status
2299   * fix jsonp callback char restrictions
2300   * remove old OPTIONS default response
2302 3.0.0rc3 / 2012-08-13
2303 ==================
2305   * update connect dep
2306   * fix signed cookies to work with `connect.cookieParser()` ("s:" prefix was missing) [tnydwrds]
2307   * fix `res.render()` clobbering of "locals"
2309 3.0.0rc2 / 2012-08-03
2310 ==================
2312   * add CORS example
2313   * update connect dep
2314   * deprecate `.createServer()` & remove old stale examples
2315   * fix: escape `res.redirect()` link
2316   * fix vhost example
2318 3.0.0rc1 / 2012-07-24
2319 ==================
2321   * add more examples to view-locals
2322   * add scheme-relative redirects (`res.redirect("//foo.com")`) support
2323   * update cookie dep
2324   * update connect dep
2325   * update send dep
2326   * fix `express(1)` -h flag, use -H for hogan. Closes #1245
2327   * fix `res.sendfile()` socket error handling regression
2329 3.0.0beta7 / 2012-07-16
2330 ==================
2332   * update connect dep for `send()` root normalization regression
2334 3.0.0beta6 / 2012-07-13
2335 ==================
2337   * add `err.view` property for view errors. Closes #1226
2338   * add "jsonp callback name" setting
2339   * add support for "/foo/:bar*" non-greedy matches
2340   * change `res.sendfile()` to use `send()` module
2341   * change `res.send` to use "response-send" module
2342   * remove `app.locals.use` and `res.locals.use`, use regular middleware
2344 3.0.0beta5 / 2012-07-03
2345 ==================
2347   * add "make check" support
2348   * add route-map example
2349   * add `res.json(obj, status)` support back for BC
2350   * add "methods" dep, remove internal methods module
2351   * update connect dep
2352   * update auth example to utilize cores pbkdf2
2353   * updated tests to use "supertest"
2355 3.0.0beta4 / 2012-06-25
2356 ==================
2358   * Added `req.auth`
2359   * Added `req.range(size)`
2360   * Added `res.links(obj)`
2361   * Added `res.send(body, status)` support back for backwards compat
2362   * Added `.default()` support to `res.format()`
2363   * Added 2xx / 304 check to `req.fresh`
2364   * Revert "Added + support to the router"
2365   * Fixed `res.send()` freshness check, respect res.statusCode
2367 3.0.0beta3 / 2012-06-15
2368 ==================
2370   * Added hogan `--hjs` to express(1) [nullfirm]
2371   * Added another example to content-negotiation
2372   * Added `fresh` dep
2373   * Changed: `res.send()` always checks freshness
2374   * Fixed: expose connects mime module. Closes #1165
2376 3.0.0beta2 / 2012-06-06
2377 ==================
2379   * Added `+` support to the router
2380   * Added `req.host`
2381   * Changed `req.param()` to check route first
2382   * Update connect dep
2384 3.0.0beta1 / 2012-06-01
2385 ==================
2387   * Added `res.format()` callback to override default 406 behaviour
2388   * Fixed `res.redirect()` 406. Closes #1154
2390 3.0.0alpha5 / 2012-05-30
2391 ==================
2393   * Added `req.ip`
2394   * Added `{ signed: true }` option to `res.cookie()`
2395   * Removed `res.signedCookie()`
2396   * Changed: dont reverse `req.ips`
2397   * Fixed "trust proxy" setting check for `req.ips`
2399 3.0.0alpha4 / 2012-05-09
2400 ==================
2402   * Added: allow `[]` in jsonp callback. Closes #1128
2403   * Added `PORT` env var support in generated template. Closes #1118 [benatkin]
2404   * Updated: connect 2.2.2
2406 3.0.0alpha3 / 2012-05-04
2407 ==================
2409   * Added public `app.routes`. Closes #887
2410   * Added _view-locals_ example
2411   * Added _mvc_ example
2412   * Added `res.locals.use()`. Closes #1120
2413   * Added conditional-GET support to `res.send()`
2414   * Added: coerce `res.set()` values to strings
2415   * Changed: moved `static()` in generated apps below router
2416   * Changed: `res.send()` only set ETag when not previously set
2417   * Changed connect 2.2.1 dep
2418   * Changed: `make test` now runs unit / acceptance tests
2419   * Fixed req/res proto inheritance
2421 3.0.0alpha2 / 2012-04-26
2422 ==================
2424   * Added `make benchmark` back
2425   * Added `res.send()` support for `String` objects
2426   * Added client-side data exposing example
2427   * Added `res.header()` and `req.header()` aliases for BC
2428   * Added `express.createServer()` for BC
2429   * Perf: memoize parsed urls
2430   * Perf: connect 2.2.0 dep
2431   * Changed: make `expressInit()` middleware self-aware
2432   * Fixed: use app.get() for all core settings
2433   * Fixed redis session example
2434   * Fixed session example. Closes #1105
2435   * Fixed generated express dep. Closes #1078
2437 3.0.0alpha1 / 2012-04-15
2438 ==================
2440   * Added `app.locals.use(callback)`
2441   * Added `app.locals` object
2442   * Added `app.locals(obj)`
2443   * Added `res.locals` object
2444   * Added `res.locals(obj)`
2445   * Added `res.format()` for content-negotiation
2446   * Added `app.engine()`
2447   * Added `res.cookie()` JSON cookie support
2448   * Added "trust proxy" setting
2449   * Added `req.subdomains`
2450   * Added `req.protocol`
2451   * Added `req.secure`
2452   * Added `req.path`
2453   * Added `req.ips`
2454   * Added `req.fresh`
2455   * Added `req.stale`
2456   * Added comma-delimited / array support for `req.accepts()`
2457   * Added debug instrumentation
2458   * Added `res.set(obj)`
2459   * Added `res.set(field, value)`
2460   * Added `res.get(field)`
2461   * Added `app.get(setting)`. Closes #842
2462   * Added `req.acceptsLanguage()`
2463   * Added `req.acceptsCharset()`
2464   * Added `req.accepted`
2465   * Added `req.acceptedLanguages`
2466   * Added `req.acceptedCharsets`
2467   * Added "json replacer" setting
2468   * Added "json spaces" setting
2469   * Added X-Forwarded-Proto support to `res.redirect()`. Closes #92
2470   * Added `--less` support to express(1)
2471   * Added `express.response` prototype
2472   * Added `express.request` prototype
2473   * Added `express.application` prototype
2474   * Added `app.path()`
2475   * Added `app.render()`
2476   * Added `res.type()` to replace `res.contentType()`
2477   * Changed: `res.redirect()` to add relative support
2478   * Changed: enable "jsonp callback" by default
2479   * Changed: renamed "case sensitive routes" to "case sensitive routing"
2480   * Rewrite of all tests with mocha
2481   * Removed "root" setting
2482   * Removed `res.redirect('home')` support
2483   * Removed `req.notify()`
2484   * Removed `app.register()`
2485   * Removed `app.redirect()`
2486   * Removed `app.is()`
2487   * Removed `app.helpers()`
2488   * Removed `app.dynamicHelpers()`
2489   * Fixed `res.sendfile()` with non-GET. Closes #723
2490   * Fixed express(1) public dir for windows. Closes #866
2492 2.5.9/ 2012-04-02
2493 ==================
2495   * Added support for PURGE request method [pbuyle]
2496   * Fixed `express(1)` generated app `app.address()` before `listening` [mmalecki]
2498 2.5.8 / 2012-02-08
2499 ==================
2501   * Update mkdirp dep. Closes #991
2503 2.5.7 / 2012-02-06
2504 ==================
2506   * Fixed `app.all` duplicate DELETE requests [mscdex]
2508 2.5.6 / 2012-01-13
2509 ==================
2511   * Updated hamljs dev dep. Closes #953
2513 2.5.5 / 2012-01-08
2514 ==================
2516   * Fixed: set `filename` on cached templates [matthewleon]
2518 2.5.4 / 2012-01-02
2519 ==================
2521   * Fixed `express(1)` eol on 0.4.x. Closes #947
2523 2.5.3 / 2011-12-30
2524 ==================
2526   * Fixed `req.is()` when a charset is present
2528 2.5.2 / 2011-12-10
2529 ==================
2531   * Fixed: express(1) LF -> CRLF for windows
2533 2.5.1 / 2011-11-17
2534 ==================
2536   * Changed: updated connect to 1.8.x
2537   * Removed sass.js support from express(1)
2539 2.5.0 / 2011-10-24
2540 ==================
2542   * Added ./routes dir for generated app by default
2543   * Added npm install reminder to express(1) app gen
2544   * Added 0.5.x support
2545   * Removed `make test-cov` since it wont work with node 0.5.x
2546   * Fixed express(1) public dir for windows. Closes #866
2548 2.4.7 / 2011-10-05
2549 ==================
2551   * Added mkdirp to express(1). Closes #795
2552   * Added simple _json-config_ example
2553   * Added  shorthand for the parsed request's pathname via `req.path`
2554   * Changed connect dep to 1.7.x to fix npm issue...
2555   * Fixed `res.redirect()` __HEAD__ support. [reported by xerox]
2556   * Fixed `req.flash()`, only escape args
2557   * Fixed absolute path checking on windows. Closes #829 [reported by andrewpmckenzie]
2559 2.4.6 / 2011-08-22
2560 ==================
2562   * Fixed multiple param callback regression. Closes #824 [reported by TroyGoode]
2564 2.4.5 / 2011-08-19
2565 ==================
2567   * Added support for routes to handle errors. Closes #809
2568   * Added `app.routes.all()`. Closes #803
2569   * Added "basepath" setting to work in conjunction with reverse proxies etc.
2570   * Refactored `Route` to use a single array of callbacks
2571   * Added support for multiple callbacks for `app.param()`. Closes #801
2572 Closes #805
2573   * Changed: removed .call(self) for route callbacks
2574   * Dependency: `qs >= 0.3.1`
2575   * Fixed `res.redirect()` on windows due to `join()` usage. Closes #808
2577 2.4.4 / 2011-08-05
2578 ==================
2580   * Fixed `res.header()` intention of a set, even when `undefined`
2581   * Fixed `*`, value no longer required
2582   * Fixed `res.send(204)` support. Closes #771
2584 2.4.3 / 2011-07-14
2585 ==================
2587   * Added docs for `status` option special-case. Closes #739
2588   * Fixed `options.filename`, exposing the view path to template engines
2590 2.4.2. / 2011-07-06
2591 ==================
2593   * Revert "removed jsonp stripping" for XSS
2595 2.4.1 / 2011-07-06
2596 ==================
2598   * Added `res.json()` JSONP support. Closes #737
2599   * Added _extending-templates_ example. Closes #730
2600   * Added "strict routing" setting for trailing slashes
2601   * Added support for multiple envs in `app.configure()` calls. Closes #735
2602   * Changed: `res.send()` using `res.json()`
2603   * Changed: when cookie `path === null` don't default it
2604   * Changed; default cookie path to "home" setting. Closes #731
2605   * Removed _pids/logs_ creation from express(1)
2607 2.4.0 / 2011-06-28
2608 ==================
2610   * Added chainable `res.status(code)`
2611   * Added `res.json()`, an explicit version of `res.send(obj)`
2612   * Added simple web-service example
2614 2.3.12 / 2011-06-22
2615 ==================
2617   * \#express is now on freenode! come join!
2618   * Added `req.get(field, param)`
2619   * Added links to Japanese documentation, thanks @hideyukisaito!
2620   * Added; the `express(1)` generated app outputs the env
2621   * Added `content-negotiation` example
2622   * Dependency: connect >= 1.5.1 < 2.0.0
2623   * Fixed view layout bug. Closes #720
2624   * Fixed; ignore body on 304. Closes #701
2626 2.3.11 / 2011-06-04
2627 ==================
2629   * Added `npm test`
2630   * Removed generation of dummy test file from `express(1)`
2631   * Fixed; `express(1)` adds express as a dep
2632   * Fixed; prune on `prepublish`
2634 2.3.10 / 2011-05-27
2635 ==================
2637   * Added `req.route`, exposing the current route
2638   * Added _package.json_ generation support to `express(1)`
2639   * Fixed call to `app.param()` function for optional params. Closes #682
2641 2.3.9 / 2011-05-25
2642 ==================
2644   * Fixed bug-ish with `../' in `res.partial()` calls
2646 2.3.8 / 2011-05-24
2647 ==================
2649   * Fixed `app.options()`
2651 2.3.7 / 2011-05-23
2652 ==================
2654   * Added route `Collection`, ex: `app.get('/user/:id').remove();`
2655   * Added support for `app.param(fn)` to define param logic
2656   * Removed `app.param()` support for callback with return value
2657   * Removed module.parent check from express(1) generated app. Closes #670
2658   * Refactored router. Closes #639
2660 2.3.6 / 2011-05-20
2661 ==================
2663   * Changed; using devDependencies instead of git submodules
2664   * Fixed redis session example
2665   * Fixed markdown example
2666   * Fixed view caching, should not be enabled in development
2668 2.3.5 / 2011-05-20
2669 ==================
2671   * Added export `.view` as alias for `.View`
2673 2.3.4 / 2011-05-08
2674 ==================
2676   * Added `./examples/say`
2677   * Fixed `res.sendfile()` bug preventing the transfer of files with spaces
2679 2.3.3 / 2011-05-03
2680 ==================
2682   * Added "case sensitive routes" option.
2683   * Changed; split methods supported per rfc [slaskis]
2684   * Fixed route-specific middleware when using the same callback function several times
2686 2.3.2 / 2011-04-27
2687 ==================
2689   * Fixed view hints
2691 2.3.1 / 2011-04-26
2692 ==================
2694   * Added `app.match()` as `app.match.all()`
2695   * Added `app.lookup()` as `app.lookup.all()`
2696   * Added `app.remove()` for `app.remove.all()`
2697   * Added `app.remove.VERB()`
2698   * Fixed template caching collision issue. Closes #644
2699   * Moved router over from connect and started refactor
2701 2.3.0 / 2011-04-25
2702 ==================
2704   * Added options support to `res.clearCookie()`
2705   * Added `res.helpers()` as alias of `res.locals()`
2706   * Added; json defaults to UTF-8 with `res.send()`. Closes #632. [Daniel   * Dependency `connect >= 1.4.0`
2707   * Changed; auto set Content-Type in res.attachement [Aaron Heckmann]
2708   * Renamed "cache views" to "view cache". Closes #628
2709   * Fixed caching of views when using several apps. Closes #637
2710   * Fixed gotcha invoking `app.param()` callbacks once per route middleware.
2711 Closes #638
2712   * Fixed partial lookup precedence. Closes #631
2713 Shaw]
2715 2.2.2 / 2011-04-12
2716 ==================
2718   * Added second callback support for `res.download()` connection errors
2719   * Fixed `filename` option passing to template engine
2721 2.2.1 / 2011-04-04
2722 ==================
2724   * Added `layout(path)` helper to change the layout within a view. Closes #610
2725   * Fixed `partial()` collection object support.
2726     Previously only anything with `.length` would work.
2727     When `.length` is present one must still be aware of holes,
2728     however now `{ collection: {foo: 'bar'}}` is valid, exposes
2729     `keyInCollection` and `keysInCollection`.
2731   * Performance improved with better view caching
2732   * Removed `request` and `response` locals
2733   * Changed; errorHandler page title is now `Express` instead of `Connect`
2735 2.2.0 / 2011-03-30
2736 ==================
2738   * Added `app.lookup.VERB()`, ex `app.lookup.put('/user/:id')`. Closes #606
2739   * Added `app.match.VERB()`, ex `app.match.put('/user/12')`. Closes #606
2740   * Added `app.VERB(path)` as alias of `app.lookup.VERB()`.
2741   * Dependency `connect >= 1.2.0`
2743 2.1.1 / 2011-03-29
2744 ==================
2746   * Added; expose `err.view` object when failing to locate a view
2747   * Fixed `res.partial()` call `next(err)` when no callback is given [reported by aheckmann]
2748   * Fixed; `res.send(undefined)` responds with 204 [aheckmann]
2750 2.1.0 / 2011-03-24
2751 ==================
2753   * Added `<root>/_?<name>` partial lookup support. Closes #447
2754   * Added `request`, `response`, and `app` local variables
2755   * Added `settings` local variable, containing the app's settings
2756   * Added `req.flash()` exception if `req.session` is not available
2757   * Added `res.send(bool)` support (json response)
2758   * Fixed stylus example for latest version
2759   * Fixed; wrap try/catch around `res.render()`
2761 2.0.0 / 2011-03-17
2762 ==================
2764   * Fixed up index view path alternative.
2765   * Changed; `res.locals()` without object returns the locals
2767 2.0.0rc3 / 2011-03-17
2768 ==================
2770   * Added `res.locals(obj)` to compliment `res.local(key, val)`
2771   * Added `res.partial()` callback support
2772   * Fixed recursive error reporting issue in `res.render()`
2774 2.0.0rc2 / 2011-03-17
2775 ==================
2777   * Changed; `partial()` "locals" are now optional
2778   * Fixed `SlowBuffer` support. Closes #584 [reported by tyrda01]
2779   * Fixed .filename view engine option [reported by drudge]
2780   * Fixed blog example
2781   * Fixed `{req,res}.app` reference when mounting [Ben Weaver]
2783 2.0.0rc / 2011-03-14
2784 ==================
2786   * Fixed; expose `HTTPSServer` constructor
2787   * Fixed express(1) default test charset. Closes #579 [reported by secoif]
2788   * Fixed; default charset to utf-8 instead of utf8 for lame IE [reported by NickP]
2790 2.0.0beta3 / 2011-03-09
2791 ==================
2793   * Added support for `res.contentType()` literal
2794     The original `res.contentType('.json')`,
2795     `res.contentType('application/json')`, and `res.contentType('json')`
2796     will work now.
2797   * Added `res.render()` status option support back
2798   * Added charset option for `res.render()`
2799   * Added `.charset` support (via connect 1.0.4)
2800   * Added view resolution hints when in development and a lookup fails
2801   * Added layout lookup support relative to the page view.
2802     For example while rendering `./views/user/index.jade` if you create
2803     `./views/user/layout.jade` it will be used in favour of the root layout.
2804   * Fixed `res.redirect()`. RFC states absolute url [reported by unlink]
2805   * Fixed; default `res.send()` string charset to utf8
2806   * Removed `Partial` constructor (not currently used)
2808 2.0.0beta2 / 2011-03-07
2809 ==================
2811   * Added res.render() `.locals` support back to aid in migration process
2812   * Fixed flash example
2814 2.0.0beta / 2011-03-03
2815 ==================
2817   * Added HTTPS support
2818   * Added `res.cookie()` maxAge support
2819   * Added `req.header()` _Referrer_ / _Referer_ special-case, either works
2820   * Added mount support for `res.redirect()`, now respects the mount-point
2821   * Added `union()` util, taking place of `merge(clone())` combo
2822   * Added stylus support to express(1) generated app
2823   * Added secret to session middleware used in examples and generated app
2824   * Added `res.local(name, val)` for progressive view locals
2825   * Added default param support to `req.param(name, default)`
2826   * Added `app.disabled()` and `app.enabled()`
2827   * Added `app.register()` support for omitting leading ".", either works
2828   * Added `res.partial()`, using the same interface as `partial()` within a view. Closes #539
2829   * Added `app.param()` to map route params to async/sync logic
2830   * Added; aliased `app.helpers()` as `app.locals()`. Closes #481
2831   * Added extname with no leading "." support to `res.contentType()`
2832   * Added `cache views` setting, defaulting to enabled in "production" env
2833   * Added index file partial resolution, eg: partial('user') may try _views/user/index.jade_.
2834   * Added `req.accepts()` support for extensions
2835   * Changed; `res.download()` and `res.sendfile()` now utilize Connect's
2836     static file server `connect.static.send()`.
2837   * Changed; replaced `connect.utils.mime()` with npm _mime_ module
2838   * Changed; allow `req.query` to be pre-defined (via middleware or other parent
2839   * Changed view partial resolution, now relative to parent view
2840   * Changed view engine signature. no longer `engine.render(str, options, callback)`, now `engine.compile(str, options) -> Function`, the returned function accepts `fn(locals)`.
2841   * Fixed `req.param()` bug returning Array.prototype methods. Closes #552
2842   * Fixed; using `Stream#pipe()` instead of `sys.pump()` in `res.sendfile()`
2843   * Fixed; using _qs_ module instead of _querystring_
2844   * Fixed; strip unsafe chars from jsonp callbacks
2845   * Removed "stream threshold" setting
2847 1.0.8 / 2011-03-01
2848 ==================
2850   * Allow `req.query` to be pre-defined (via middleware or other parent app)
2851   * "connect": ">= 0.5.0 < 1.0.0". Closes #547
2852   * Removed the long deprecated __EXPRESS_ENV__ support
2854 1.0.7 / 2011-02-07
2855 ==================
2857   * Fixed `render()` setting inheritance.
2858     Mounted apps would not inherit "view engine"
2860 1.0.6 / 2011-02-07
2861 ==================
2863   * Fixed `view engine` setting bug when period is in dirname
2865 1.0.5 / 2011-02-05
2866 ==================
2868   * Added secret to generated app `session()` call
2870 1.0.4 / 2011-02-05
2871 ==================
2873   * Added `qs` dependency to _package.json_
2874   * Fixed namespaced `require()`s for latest connect support
2876 1.0.3 / 2011-01-13
2877 ==================
2879   * Remove unsafe characters from JSONP callback names [Ryan Grove]
2881 1.0.2 / 2011-01-10
2882 ==================
2884   * Removed nested require, using `connect.router`
2886 1.0.1 / 2010-12-29
2887 ==================
2889   * Fixed for middleware stacked via `createServer()`
2890     previously the `foo` middleware passed to `createServer(foo)`
2891     would not have access to Express methods such as `res.send()`
2892     or props like `req.query` etc.
2894 1.0.0 / 2010-11-16
2895 ==================
2897   * Added; deduce partial object names from the last segment.
2898     For example by default `partial('forum/post', postObject)` will
2899     give you the _post_ object, providing a meaningful default.
2900   * Added http status code string representation to `res.redirect()` body
2901   * Added; `res.redirect()` supporting _text/plain_ and _text/html_ via __Accept__.
2902   * Added `req.is()` to aid in content negotiation
2903   * Added partial local inheritance [suggested by masylum]. Closes #102
2904     providing access to parent template locals.
2905   * Added _-s, --session[s]_ flag to express(1) to add session related middleware
2906   * Added _--template_ flag to express(1) to specify the
2907     template engine to use.
2908   * Added _--css_ flag to express(1) to specify the
2909     stylesheet engine to use (or just plain css by default).
2910   * Added `app.all()` support [thanks aheckmann]
2911   * Added partial direct object support.
2912     You may now `partial('user', user)` providing the "user" local,
2913     vs previously `partial('user', { object: user })`.
2914   * Added _route-separation_ example since many people question ways
2915     to do this with CommonJS modules. Also view the _blog_ example for
2916     an alternative.
2917   * Performance; caching view path derived partial object names
2918   * Fixed partial local inheritance precedence. [reported by Nick Poulden] Closes #454
2919   * Fixed jsonp support; _text/javascript_ as per mailinglist discussion
2921 1.0.0rc4 / 2010-10-14
2922 ==================
2924   * Added _NODE_ENV_ support, _EXPRESS_ENV_ is deprecated and will be removed in 1.0.0
2925   * Added route-middleware support (very helpful, see the [docs](http://expressjs.com/guide.html#Route-Middleware))
2926   * Added _jsonp callback_ setting to enable/disable jsonp autowrapping [Dav Glass]
2927   * Added callback query check on response.send to autowrap JSON objects for simple webservice implementations [Dav Glass]
2928   * Added `partial()` support for array-like collections. Closes #434
2929   * Added support for swappable querystring parsers
2930   * Added session usage docs. Closes #443
2931   * Added dynamic helper caching. Closes #439 [suggested by maritz]
2932   * Added authentication example
2933   * Added basic Range support to `res.sendfile()` (and `res.download()` etc)
2934   * Changed; `express(1)` generated app using 2 spaces instead of 4
2935   * Default env to "development" again [aheckmann]
2936   * Removed _context_ option is no more, use "scope"
2937   * Fixed; exposing _./support_ libs to examples so they can run without installs
2938   * Fixed mvc example
2940 1.0.0rc3 / 2010-09-20
2941 ==================
2943   * Added confirmation for `express(1)` app generation. Closes #391
2944   * Added extending of flash formatters via `app.flashFormatters`
2945   * Added flash formatter support. Closes #411
2946   * Added streaming support to `res.sendfile()` using `sys.pump()` when >= "stream threshold"
2947   * Added _stream threshold_ setting for `res.sendfile()`
2948   * Added `res.send()` __HEAD__ support
2949   * Added `res.clearCookie()`
2950   * Added `res.cookie()`
2951   * Added `res.render()` headers option
2952   * Added `res.redirect()` response bodies
2953   * Added `res.render()` status option support. Closes #425 [thanks aheckmann]
2954   * Fixed `res.sendfile()` responding with 403 on malicious path
2955   * Fixed `res.download()` bug; when an error occurs remove _Content-Disposition_
2956   * Fixed; mounted apps settings now inherit from parent app [aheckmann]
2957   * Fixed; stripping Content-Length / Content-Type when 204
2958   * Fixed `res.send()` 204. Closes #419
2959   * Fixed multiple _Set-Cookie_ headers via `res.header()`. Closes #402
2960   * Fixed bug messing with error handlers when `listenFD()` is called instead of `listen()`. [thanks guillermo]
2963 1.0.0rc2 / 2010-08-17
2964 ==================
2966   * Added `app.register()` for template engine mapping. Closes #390
2967   * Added `res.render()` callback support as second argument (no options)
2968   * Added callback support to `res.download()`
2969   * Added callback support for `res.sendfile()`
2970   * Added support for middleware access via `express.middlewareName()` vs `connect.middlewareName()`
2971   * Added "partials" setting to docs
2972   * Added default expresso tests to `express(1)` generated app. Closes #384
2973   * Fixed `res.sendfile()` error handling, defer via `next()`
2974   * Fixed `res.render()` callback when a layout is used [thanks guillermo]
2975   * Fixed; `make install` creating ~/.node_libraries when not present
2976   * Fixed issue preventing error handlers from being defined anywhere. Closes #387
2978 1.0.0rc / 2010-07-28
2979 ==================
2981   * Added mounted hook. Closes #369
2982   * Added connect dependency to _package.json_
2984   * Removed "reload views" setting and support code
2985     development env never caches, production always caches.
2987   * Removed _param_ in route callbacks, signature is now
2988     simply (req, res, next), previously (req, res, params, next).
2989     Use _req.params_ for path captures, _req.query_ for GET params.
2991   * Fixed "home" setting
2992   * Fixed middleware/router precedence issue. Closes #366
2993   * Fixed; _configure()_ callbacks called immediately. Closes #368
2995 1.0.0beta2 / 2010-07-23
2996 ==================
2998   * Added more examples
2999   * Added; exporting `Server` constructor
3000   * Added `Server#helpers()` for view locals
3001   * Added `Server#dynamicHelpers()` for dynamic view locals. Closes #349
3002   * Added support for absolute view paths
3003   * Added; _home_ setting defaults to `Server#route` for mounted apps. Closes #363
3004   * Added Guillermo Rauch to the contributor list
3005   * Added support for "as" for non-collection partials. Closes #341
3006   * Fixed _install.sh_, ensuring _~/.node_libraries_ exists. Closes #362 [thanks jf]
3007   * Fixed `res.render()` exceptions, now passed to `next()` when no callback is given [thanks guillermo]
3008   * Fixed instanceof `Array` checks, now `Array.isArray()`
3009   * Fixed express(1) expansion of public dirs. Closes #348
3010   * Fixed middleware precedence. Closes #345
3011   * Fixed view watcher, now async [thanks aheckmann]
3013 1.0.0beta / 2010-07-15
3014 ==================
3016   * Re-write
3017     - much faster
3018     - much lighter
3019     - Check [ExpressJS.com](http://expressjs.com) for migration guide and updated docs
3021 0.14.0 / 2010-06-15
3022 ==================
3024   * Utilize relative requires
3025   * Added Static bufferSize option [aheckmann]
3026   * Fixed caching of view and partial subdirectories [aheckmann]
3027   * Fixed mime.type() comments now that ".ext" is not supported
3028   * Updated haml submodule
3029   * Updated class submodule
3030   * Removed bin/express
3032 0.13.0 / 2010-06-01
3033 ==================
3035   * Added node v0.1.97 compatibility
3036   * Added support for deleting cookies via Request#cookie('key', null)
3037   * Updated haml submodule
3038   * Fixed not-found page, now using using charset utf-8
3039   * Fixed show-exceptions page, now using using charset utf-8
3040   * Fixed view support due to fs.readFile Buffers
3041   * Changed; mime.type() no longer accepts ".type" due to node extname() changes
3043 0.12.0 / 2010-05-22
3044 ==================
3046   * Added node v0.1.96 compatibility
3047   * Added view `helpers` export which act as additional local variables
3048   * Updated haml submodule
3049   * Changed ETag; removed inode, modified time only
3050   * Fixed LF to CRLF for setting multiple cookies
3051   * Fixed cookie complation; values are now urlencoded
3052   * Fixed cookies parsing; accepts quoted values and url escaped cookies
3054 0.11.0 / 2010-05-06
3055 ==================
3057   * Added support for layouts using different engines
3058     - this.render('page.html.haml', { layout: 'super-cool-layout.html.ejs' })
3059     - this.render('page.html.haml', { layout: 'foo' }) // assumes 'foo.html.haml'
3060     - this.render('page.html.haml', { layout: false }) // no layout
3061   * Updated ext submodule
3062   * Updated haml submodule
3063   * Fixed EJS partial support by passing along the context. Issue #307
3065 0.10.1 / 2010-05-03
3066 ==================
3068   * Fixed binary uploads.
3070 0.10.0 / 2010-04-30
3071 ==================
3073   * Added charset support via Request#charset (automatically assigned to 'UTF-8' when respond()'s
3074     encoding is set to 'utf8' or 'utf-8'.
3075   * Added "encoding" option to Request#render(). Closes #299
3076   * Added "dump exceptions" setting, which is enabled by default.
3077   * Added simple ejs template engine support
3078   * Added error response support for text/plain, application/json. Closes #297
3079   * Added callback function param to Request#error()
3080   * Added Request#sendHead()
3081   * Added Request#stream()
3082   * Added support for Request#respond(304, null) for empty response bodies
3083   * Added ETag support to Request#sendfile()
3084   * Added options to Request#sendfile(), passed to fs.createReadStream()
3085   * Added filename arg to Request#download()
3086   * Performance enhanced due to pre-reversing plugins so that plugins.reverse() is not called on each request
3087   * Performance enhanced by preventing several calls to toLowerCase() in Router#match()
3088   * Changed; Request#sendfile() now streams
3089   * Changed; Renamed Request#halt() to Request#respond(). Closes #289
3090   * Changed; Using sys.inspect() instead of JSON.encode() for error output
3091   * Changed; run() returns the http.Server instance. Closes #298
3092   * Changed; Defaulting Server#host to null (INADDR_ANY)
3093   * Changed; Logger "common" format scale of 0.4f
3094   * Removed Logger "request" format
3095   * Fixed; Catching ENOENT in view caching, preventing error when "views/partials" is not found
3096   * Fixed several issues with http client
3097   * Fixed Logger Content-Length output
3098   * Fixed bug preventing Opera from retaining the generated session id. Closes #292
3100 0.9.0 / 2010-04-14
3101 ==================
3103   * Added DSL level error() route support
3104   * Added DSL level notFound() route support
3105   * Added Request#error()
3106   * Added Request#notFound()
3107   * Added Request#render() callback function. Closes #258
3108   * Added "max upload size" setting
3109   * Added "magic" variables to collection partials (\_\_index\_\_, \_\_length\_\_, \_\_isFirst\_\_, \_\_isLast\_\_). Closes #254
3110   * Added [haml.js](http://github.com/visionmedia/haml.js) submodule; removed haml-js
3111   * Added callback function support to Request#halt() as 3rd/4th arg
3112   * Added preprocessing of route param wildcards using param(). Closes #251
3113   * Added view partial support (with collections etc)
3114   * Fixed bug preventing falsey params (such as ?page=0). Closes #286
3115   * Fixed setting of multiple cookies. Closes #199
3116   * Changed; view naming convention is now NAME.TYPE.ENGINE (for example page.html.haml)
3117   * Changed; session cookie is now httpOnly
3118   * Changed; Request is no longer global
3119   * Changed; Event is no longer global
3120   * Changed; "sys" module is no longer global
3121   * Changed; moved Request#download to Static plugin where it belongs
3122   * Changed; Request instance created before body parsing. Closes #262
3123   * Changed; Pre-caching views in memory when "cache view contents" is enabled. Closes #253
3124   * Changed; Pre-caching view partials in memory when "cache view partials" is enabled
3125   * Updated support to node --version 0.1.90
3126   * Updated dependencies
3127   * Removed set("session cookie") in favour of use(Session, { cookie: { ... }})
3128   * Removed utils.mixin(); use Object#mergeDeep()
3130 0.8.0 / 2010-03-19
3131 ==================
3133   * Added coffeescript example app. Closes #242
3134   * Changed; cache api now async friendly. Closes #240
3135   * Removed deprecated 'express/static' support. Use 'express/plugins/static'
3137 0.7.6 / 2010-03-19
3138 ==================
3140   * Added Request#isXHR. Closes #229
3141   * Added `make install` (for the executable)
3142   * Added `express` executable for setting up simple app templates
3143   * Added "GET /public/*" to Static plugin, defaulting to <root>/public
3144   * Added Static plugin
3145   * Fixed; Request#render() only calls cache.get() once
3146   * Fixed; Namespacing View caches with "view:"
3147   * Fixed; Namespacing Static caches with "static:"
3148   * Fixed; Both example apps now use the Static plugin
3149   * Fixed set("views"). Closes #239
3150   * Fixed missing space for combined log format
3151   * Deprecated Request#sendfile() and 'express/static'
3152   * Removed Server#running
3154 0.7.5 / 2010-03-16
3155 ==================
3157   * Added Request#flash() support without args, now returns all flashes
3158   * Updated ext submodule
3160 0.7.4 / 2010-03-16
3161 ==================
3163   * Fixed session reaper
3164   * Changed; class.js replacing js-oo Class implementation (quite a bit faster, no browser cruft)
3166 0.7.3 / 2010-03-16
3167 ==================
3169   * Added package.json
3170   * Fixed requiring of haml / sass due to kiwi removal
3172 0.7.2 / 2010-03-16
3173 ==================
3175   * Fixed GIT submodules (HAH!)
3177 0.7.1 / 2010-03-16
3178 ==================
3180   * Changed; Express now using submodules again until a PM is adopted
3181   * Changed; chat example using millisecond conversions from ext
3183 0.7.0 / 2010-03-15
3184 ==================
3186   * Added Request#pass() support (finds the next matching route, or the given path)
3187   * Added Logger plugin (default "common" format replaces CommonLogger)
3188   * Removed Profiler plugin
3189   * Removed CommonLogger plugin
3191 0.6.0 / 2010-03-11
3192 ==================
3194   * Added seed.yml for kiwi package management support
3195   * Added HTTP client query string support when method is GET. Closes #205
3197   * Added support for arbitrary view engines.
3198     For example "foo.engine.html" will now require('engine'),
3199     the exports from this module are cached after the first require().
3201   * Added async plugin support
3203   * Removed usage of RESTful route funcs as http client
3204     get() etc, use http.get() and friends
3206   * Removed custom exceptions
3208 0.5.0 / 2010-03-10
3209 ==================
3211   * Added ext dependency (library of js extensions)
3212   * Removed extname() / basename() utils. Use path module
3213   * Removed toArray() util. Use arguments.values
3214   * Removed escapeRegexp() util. Use RegExp.escape()
3215   * Removed process.mixin() dependency. Use utils.mixin()
3216   * Removed Collection
3217   * Removed ElementCollection
3218   * Shameless self promotion of ebook "Advanced JavaScript" (http://dev-mag.com)  ;)
3220 0.4.0 / 2010-02-11
3221 ==================
3223   * Added flash() example to sample upload app
3224   * Added high level restful http client module (express/http)
3225   * Changed; RESTful route functions double as HTTP clients. Closes #69
3226   * Changed; throwing error when routes are added at runtime
3227   * Changed; defaulting render() context to the current Request. Closes #197
3228   * Updated haml submodule
3230 0.3.0 / 2010-02-11
3231 ==================
3233   * Updated haml / sass submodules. Closes #200
3234   * Added flash message support. Closes #64
3235   * Added accepts() now allows multiple args. fixes #117
3236   * Added support for plugins to halt. Closes #189
3237   * Added alternate layout support. Closes #119
3238   * Removed Route#run(). Closes #188
3239   * Fixed broken specs due to use(Cookie) missing
3241 0.2.1 / 2010-02-05
3242 ==================
3244   * Added "plot" format option for Profiler (for gnuplot processing)
3245   * Added request number to Profiler plugin
3246   * Fixed binary encoding for multi-part file uploads, was previously defaulting to UTF8
3247   * Fixed issue with routes not firing when not files are present. Closes #184
3248   * Fixed process.Promise -> events.Promise
3250 0.2.0 / 2010-02-03
3251 ==================
3253   * Added parseParam() support for name[] etc. (allows for file inputs with "multiple" attr) Closes #180
3254   * Added Both Cache and Session option "reapInterval" may be "reapEvery". Closes #174
3255   * Added expiration support to cache api with reaper. Closes #133
3256   * Added cache Store.Memory#reap()
3257   * Added Cache; cache api now uses first class Cache instances
3258   * Added abstract session Store. Closes #172
3259   * Changed; cache Memory.Store#get() utilizing Collection
3260   * Renamed MemoryStore -> Store.Memory
3261   * Fixed use() of the same plugin several time will always use latest options. Closes #176
3263 0.1.0 / 2010-02-03
3264 ==================
3266   * Changed; Hooks (before / after) pass request as arg as well as evaluated in their context
3267   * Updated node support to 0.1.27 Closes #169
3268   * Updated dirname(__filename) -> __dirname
3269   * Updated libxmljs support to v0.2.0
3270   * Added session support with memory store / reaping
3271   * Added quick uid() helper
3272   * Added multi-part upload support
3273   * Added Sass.js support / submodule
3274   * Added production env caching view contents and static files
3275   * Added static file caching. Closes #136
3276   * Added cache plugin with memory stores
3277   * Added support to StaticFile so that it works with non-textual files.
3278   * Removed dirname() helper
3279   * Removed several globals (now their modules must be required)
3281 0.0.2 / 2010-01-10
3282 ==================
3284   * Added view benchmarks; currently haml vs ejs
3285   * Added Request#attachment() specs. Closes #116
3286   * Added use of node's parseQuery() util. Closes #123
3287   * Added `make init` for submodules
3288   * Updated Haml
3289   * Updated sample chat app to show messages on load
3290   * Updated libxmljs parseString -> parseHtmlString
3291   * Fixed `make init` to work with older versions of git
3292   * Fixed specs can now run independent specs for those who cant build deps. Closes #127
3293   * Fixed issues introduced by the node url module changes. Closes 126.
3294   * Fixed two assertions failing due to Collection#keys() returning strings
3295   * Fixed faulty Collection#toArray() spec due to keys() returning strings
3296   * Fixed `make test` now builds libxmljs.node before testing
3298 0.0.1 / 2010-01-03
3299 ==================
3301   * Initial release