5 * Added "case sensitive routes" option.
6 * Changed; split methods supported per rfc [slaskis]
7 * Fixed route-specific middleware when using the same callback function several times
17 * Added `app.match()` as `app.match.all()`
18 * Added `app.lookup()` as `app.lookup.all()`
19 * Added `app.remove()` for `app.remove.all()`
20 * Added `app.remove.VERB()`
21 * Fixed template caching collision issue. Closes #644
22 * Moved router over from connect and started refactor
27 * Added options support to `res.clearCookie()`
28 * Added `res.helpers()` as alias of `res.locals()`
29 * Added; json defaults to UTF-8 with `res.send()`. Closes #632. [Daniel * Dependency `connect >= 1.4.0`
30 * Changed; auto set Content-Type in res.attachement [Aaron Heckmann]
31 * Renamed "cache views" to "view cache". Closes #628
32 * Fixed caching of views when using several apps. Closes #637
33 * Fixed gotcha invoking `app.param()` callbacks once per route middleware.
35 * Fixed partial lookup precedence. Closes #631
41 * Added second callback support for `res.download()` connection errors
42 * Fixed `filename` option passing to template engine
47 * Added `layout(path)` helper to change the layout within a view. Closes #610
48 * Fixed `partial()` collection object support.
49 Previously only anything with `.length` would work.
50 When `.length` is present one must still be aware of holes,
51 however now `{ collection: {foo: 'bar'}}` is valid, exposes
52 `keyInCollection` and `keysInCollection`.
54 * Performance improved with better view caching
55 * Removed `request` and `response` locals
56 * Changed; errorHandler page title is now `Express` instead of `Connect`
61 * Added `app.lookup.VERB()`, ex `app.lookup.put('/user/:id')`. Closes #606
62 * Added `app.match.VERB()`, ex `app.match.put('/user/12')`. Closes #606
63 * Added `app.VERB(path)` as alias of `app.lookup.VERB()`.
64 * Dependency `connect >= 1.2.0`
69 * Added; expose `err.view` object when failing to locate a view
70 * Fixed `res.partial()` call `next(err)` when no callback is given [reported by aheckmann]
71 * Fixed; `res.send(undefined)` responds with 204 [aheckmann]
76 * Added `<root>/_?<name>` partial lookup support. Closes #447
77 * Added `request`, `response`, and `app` local variables
78 * Added `settings` local variable, containing the app's settings
79 * Added `req.flash()` exception if `req.session` is not available
80 * Added `res.send(bool)` support (json response)
81 * Fixed stylus example for latest version
82 * Fixed; wrap try/catch around `res.render()`
87 * Fixed up index view path alternative.
88 * Changed; `res.locals()` without object returns the locals
93 * Added `res.locals(obj)` to compliment `res.local(key, val)`
94 * Added `res.partial()` callback support
95 * Fixed recursive error reporting issue in `res.render()`
100 * Changed; `partial()` "locals" are now optional
101 * Fixed `SlowBuffer` support. Closes #584 [reported by tyrda01]
102 * Fixed .filename view engine option [reported by drudge]
104 * Fixed `{req,res}.app` reference when mounting [Ben Weaver]
109 * Fixed; expose `HTTPSServer` constructor
110 * Fixed express(1) default test charset. Closes #579 [reported by secoif]
111 * Fixed; default charset to utf-8 instead of utf8 for lame IE [reported by NickP]
113 2.0.0beta3 / 2011-03-09
116 * Added support for `res.contentType()` literal
117 The original `res.contentType('.json')`,
118 `res.contentType('application/json')`, and `res.contentType('json')`
120 * Added `res.render()` status option support back
121 * Added charset option for `res.render()`
122 * Added `.charset` support (via connect 1.0.4)
123 * Added view resolution hints when in development and a lookup fails
124 * Added layout lookup support relative to the page view.
125 For example while rendering `./views/user/index.jade` if you create
126 `./views/user/layout.jade` it will be used in favour of the root layout.
127 * Fixed `res.redirect()`. RFC states absolute url [reported by unlink]
128 * Fixed; default `res.send()` string charset to utf8
129 * Removed `Partial` constructor (not currently used)
131 2.0.0beta2 / 2011-03-07
134 * Added res.render() `.locals` support back to aid in migration process
135 * Fixed flash example
137 2.0.0beta / 2011-03-03
140 * Added HTTPS support
141 * Added `res.cookie()` maxAge support
142 * Added `req.header()` _Referrer_ / _Referer_ special-case, either works
143 * Added mount support for `res.redirect()`, now respects the mount-point
144 * Added `union()` util, taking place of `merge(clone())` combo
145 * Added stylus support to express(1) generated app
146 * Added secret to session middleware used in examples and generated app
147 * Added `res.local(name, val)` for progressive view locals
148 * Added default param support to `req.param(name, default)`
149 * Added `app.disabled()` and `app.enabled()`
150 * Added `app.register()` support for omitting leading ".", either works
151 * Added `res.partial()`, using the same interface as `partial()` within a view. Closes #539
152 * Added `app.param()` to map route params to async/sync logic
153 * Added; aliased `app.helpers()` as `app.locals()`. Closes #481
154 * Added extname with no leading "." support to `res.contentType()`
155 * Added `cache views` setting, defaulting to enabled in "production" env
156 * Added index file partial resolution, eg: partial('user') may try _views/user/index.jade_.
157 * Added `req.accepts()` support for extensions
158 * Changed; `res.download()` and `res.sendfile()` now utilize Connect's
159 static file server `connect.static.send()`.
160 * Changed; replaced `connect.utils.mime()` with npm _mime_ module
161 * Changed; allow `req.query` to be pre-defined (via middleware or other parent
162 * Changed view partial resolution, now relative to parent view
163 * Changed view engine signature. no longer `engine.render(str, options, callback)`, now `engine.compile(str, options) -> Function`, the returned function accepts `fn(locals)`.
164 * Fixed `req.param()` bug returning Array.prototype methods. Closes #552
165 * Fixed; using `Stream#pipe()` instead of `sys.pump()` in `res.sendfile()`
166 * Fixed; using _qs_ module instead of _querystring_
167 * Fixed; strip unsafe chars from jsonp callbacks
168 * Removed "stream threshold" setting
173 * Allow `req.query` to be pre-defined (via middleware or other parent app)
174 * "connect": ">= 0.5.0 < 1.0.0". Closes #547
175 * Removed the long deprecated __EXPRESS_ENV__ support
180 * Fixed `render()` setting inheritance.
181 Mounted apps would not inherit "view engine"
186 * Fixed `view engine` setting bug when period is in dirname
191 * Added secret to generated app `session()` call
196 * Added `qs` dependency to _package.json_
197 * Fixed namespaced `require()`s for latest connect support
202 * Remove unsafe characters from JSONP callback names [Ryan Grove]
207 * Removed nested require, using `connect.router`
212 * Fixed for middleware stacked via `createServer()`
213 previously the `foo` middleware passed to `createServer(foo)`
214 would not have access to Express methods such as `res.send()`
215 or props like `req.query` etc.
220 * Added; deduce partial object names from the last segment.
221 For example by default `partial('forum/post', postObject)` will
222 give you the _post_ object, providing a meaningful default.
223 * Added http status code string representation to `res.redirect()` body
224 * Added; `res.redirect()` supporting _text/plain_ and _text/html_ via __Accept__.
225 * Added `req.is()` to aid in content negotiation
226 * Added partial local inheritance [suggested by masylum]. Closes #102
227 providing access to parent template locals.
228 * Added _-s, --session[s]_ flag to express(1) to add session related middleware
229 * Added _--template_ flag to express(1) to specify the
230 template engine to use.
231 * Added _--css_ flag to express(1) to specify the
232 stylesheet engine to use (or just plain css by default).
233 * Added `app.all()` support [thanks aheckmann]
234 * Added partial direct object support.
235 You may now `partial('user', user)` providing the "user" local,
236 vs previously `partial('user', { object: user })`.
237 * Added _route-separation_ example since many people question ways
238 to do this with CommonJS modules. Also view the _blog_ example for
240 * Performance; caching view path derived partial object names
241 * Fixed partial local inheritance precedence. [reported by Nick Poulden] Closes #454
242 * Fixed jsonp support; _text/javascript_ as per mailinglist discussion
244 1.0.0rc4 / 2010-10-14
247 * Added _NODE_ENV_ support, _EXPRESS_ENV_ is deprecated and will be removed in 1.0.0
248 * Added route-middleware support (very helpful, see the [docs](http://expressjs.com/guide.html#Route-Middleware))
249 * Added _jsonp callback_ setting to enable/disable jsonp autowrapping [Dav Glass]
250 * Added callback query check on response.send to autowrap JSON objects for simple webservice implementations [Dav Glass]
251 * Added `partial()` support for array-like collections. Closes #434
252 * Added support for swappable querystring parsers
253 * Added session usage docs. Closes #443
254 * Added dynamic helper caching. Closes #439 [suggested by maritz]
255 * Added authentication example
256 * Added basic Range support to `res.sendfile()` (and `res.download()` etc)
257 * Changed; `express(1)` generated app using 2 spaces instead of 4
258 * Default env to "development" again [aheckmann]
259 * Removed _context_ option is no more, use "scope"
260 * Fixed; exposing _./support_ libs to examples so they can run without installs
263 1.0.0rc3 / 2010-09-20
266 * Added confirmation for `express(1)` app generation. Closes #391
267 * Added extending of flash formatters via `app.flashFormatters`
268 * Added flash formatter support. Closes #411
269 * Added streaming support to `res.sendfile()` using `sys.pump()` when >= "stream threshold"
270 * Added _stream threshold_ setting for `res.sendfile()`
271 * Added `res.send()` __HEAD__ support
272 * Added `res.clearCookie()`
273 * Added `res.cookie()`
274 * Added `res.render()` headers option
275 * Added `res.redirect()` response bodies
276 * Added `res.render()` status option support. Closes #425 [thanks aheckmann]
277 * Fixed `res.sendfile()` responding with 403 on malicious path
278 * Fixed `res.download()` bug; when an error occurs remove _Content-Disposition_
279 * Fixed; mounted apps settings now inherit from parent app [aheckmann]
280 * Fixed; stripping Content-Length / Content-Type when 204
281 * Fixed `res.send()` 204. Closes #419
282 * Fixed multiple _Set-Cookie_ headers via `res.header()`. Closes #402
283 * Fixed bug messing with error handlers when `listenFD()` is called instead of `listen()`. [thanks guillermo]
286 1.0.0rc2 / 2010-08-17
289 * Added `app.register()` for template engine mapping. Closes #390
290 * Added `res.render()` callback support as second argument (no options)
291 * Added callback support to `res.download()`
292 * Added callback support for `res.sendfile()`
293 * Added support for middleware access via `express.middlewareName()` vs `connect.middlewareName()`
294 * Added "partials" setting to docs
295 * Added default expresso tests to `express(1)` generated app. Closes #384
296 * Fixed `res.sendfile()` error handling, defer via `next()`
297 * Fixed `res.render()` callback when a layout is used [thanks guillermo]
298 * Fixed; `make install` creating ~/.node_libraries when not present
299 * Fixed issue preventing error handlers from being defined anywhere. Closes #387
304 * Added mounted hook. Closes #369
305 * Added connect dependency to _package.json_
307 * Removed "reload views" setting and support code
308 development env never caches, production always caches.
310 * Removed _param_ in route callbacks, signature is now
311 simply (req, res, next), previously (req, res, params, next).
312 Use _req.params_ for path captures, _req.query_ for GET params.
314 * Fixed "home" setting
315 * Fixed middleware/router precedence issue. Closes #366
316 * Fixed; _configure()_ callbacks called immediately. Closes #368
318 1.0.0beta2 / 2010-07-23
321 * Added more examples
322 * Added; exporting `Server` constructor
323 * Added `Server#helpers()` for view locals
324 * Added `Server#dynamicHelpers()` for dynamic view locals. Closes #349
325 * Added support for absolute view paths
326 * Added; _home_ setting defaults to `Server#route` for mounted apps. Closes #363
327 * Added Guillermo Rauch to the contributor list
328 * Added support for "as" for non-collection partials. Closes #341
329 * Fixed _install.sh_, ensuring _~/.node_libraries_ exists. Closes #362 [thanks jf]
330 * Fixed `res.render()` exceptions, now passed to `next()` when no callback is given [thanks guillermo]
331 * Fixed instanceof `Array` checks, now `Array.isArray()`
332 * Fixed express(1) expansion of public dirs. Closes #348
333 * Fixed middleware precedence. Closes #345
334 * Fixed view watcher, now async [thanks aheckmann]
336 1.0.0beta / 2010-07-15
342 - Check [ExpressJS.com](http://expressjs.com) for migration guide and updated docs
347 * Utilize relative requires
348 * Added Static bufferSize option [aheckmann]
349 * Fixed caching of view and partial subdirectories [aheckmann]
350 * Fixed mime.type() comments now that ".ext" is not supported
351 * Updated haml submodule
352 * Updated class submodule
353 * Removed bin/express
358 * Added node v0.1.97 compatibility
359 * Added support for deleting cookies via Request#cookie('key', null)
360 * Updated haml submodule
361 * Fixed not-found page, now using using charset utf-8
362 * Fixed show-exceptions page, now using using charset utf-8
363 * Fixed view support due to fs.readFile Buffers
364 * Changed; mime.type() no longer accepts ".type" due to node extname() changes
369 * Added node v0.1.96 compatibility
370 * Added view `helpers` export which act as additional local variables
371 * Updated haml submodule
372 * Changed ETag; removed inode, modified time only
373 * Fixed LF to CRLF for setting multiple cookies
374 * Fixed cookie complation; values are now urlencoded
375 * Fixed cookies parsing; accepts quoted values and url escaped cookies
380 * Added support for layouts using different engines
381 - this.render('page.html.haml', { layout: 'super-cool-layout.html.ejs' })
382 - this.render('page.html.haml', { layout: 'foo' }) // assumes 'foo.html.haml'
383 - this.render('page.html.haml', { layout: false }) // no layout
384 * Updated ext submodule
385 * Updated haml submodule
386 * Fixed EJS partial support by passing along the context. Issue #307
391 * Fixed binary uploads.
396 * Added charset support via Request#charset (automatically assigned to 'UTF-8' when respond()'s
397 encoding is set to 'utf8' or 'utf-8'.
398 * Added "encoding" option to Request#render(). Closes #299
399 * Added "dump exceptions" setting, which is enabled by default.
400 * Added simple ejs template engine support
401 * Added error reponse support for text/plain, application/json. Closes #297
402 * Added callback function param to Request#error()
403 * Added Request#sendHead()
404 * Added Request#stream()
405 * Added support for Request#respond(304, null) for empty response bodies
406 * Added ETag support to Request#sendfile()
407 * Added options to Request#sendfile(), passed to fs.createReadStream()
408 * Added filename arg to Request#download()
409 * Performance enhanced due to pre-reversing plugins so that plugins.reverse() is not called on each request
410 * Performance enhanced by preventing several calls to toLowerCase() in Router#match()
411 * Changed; Request#sendfile() now streams
412 * Changed; Renamed Request#halt() to Request#respond(). Closes #289
413 * Changed; Using sys.inspect() instead of JSON.encode() for error output
414 * Changed; run() returns the http.Server instance. Closes #298
415 * Changed; Defaulting Server#host to null (INADDR_ANY)
416 * Changed; Logger "common" format scale of 0.4f
417 * Removed Logger "request" format
418 * Fixed; Catching ENOENT in view caching, preventing error when "views/partials" is not found
419 * Fixed several issues with http client
420 * Fixed Logger Content-Length output
421 * Fixed bug preventing Opera from retaining the generated session id. Closes #292
426 * Added DSL level error() route support
427 * Added DSL level notFound() route support
428 * Added Request#error()
429 * Added Request#notFound()
430 * Added Request#render() callback function. Closes #258
431 * Added "max upload size" setting
432 * Added "magic" variables to collection partials (\_\_index\_\_, \_\_length\_\_, \_\_isFirst\_\_, \_\_isLast\_\_). Closes #254
433 * Added [haml.js](http://github.com/visionmedia/haml.js) submodule; removed haml-js
434 * Added callback function support to Request#halt() as 3rd/4th arg
435 * Added preprocessing of route param wildcards using param(). Closes #251
436 * Added view partial support (with collections etc)
437 * Fixed bug preventing falsey params (such as ?page=0). Closes #286
438 * Fixed setting of multiple cookies. Closes #199
439 * Changed; view naming convention is now NAME.TYPE.ENGINE (for example page.html.haml)
440 * Changed; session cookie is now httpOnly
441 * Changed; Request is no longer global
442 * Changed; Event is no longer global
443 * Changed; "sys" module is no longer global
444 * Changed; moved Request#download to Static plugin where it belongs
445 * Changed; Request instance created before body parsing. Closes #262
446 * Changed; Pre-caching views in memory when "cache view contents" is enabled. Closes #253
447 * Changed; Pre-caching view partials in memory when "cache view partials" is enabled
448 * Updated support to node --version 0.1.90
449 * Updated dependencies
450 * Removed set("session cookie") in favour of use(Session, { cookie: { ... }})
451 * Removed utils.mixin(); use Object#mergeDeep()
456 * Added coffeescript example app. Closes #242
457 * Changed; cache api now async friendly. Closes #240
458 * Removed deprecated 'express/static' support. Use 'express/plugins/static'
463 * Added Request#isXHR. Closes #229
464 * Added `make install` (for the executable)
465 * Added `express` executable for setting up simple app templates
466 * Added "GET /public/*" to Static plugin, defaulting to <root>/public
467 * Added Static plugin
468 * Fixed; Request#render() only calls cache.get() once
469 * Fixed; Namespacing View caches with "view:"
470 * Fixed; Namespacing Static caches with "static:"
471 * Fixed; Both example apps now use the Static plugin
472 * Fixed set("views"). Closes #239
473 * Fixed missing space for combined log format
474 * Deprecated Request#sendfile() and 'express/static'
475 * Removed Server#running
480 * Added Request#flash() support without args, now returns all flashes
481 * Updated ext submodule
486 * Fixed session reaper
487 * Changed; class.js replacing js-oo Class implementation (quite a bit faster, no browser cruft)
493 * Fixed requiring of haml / sass due to kiwi removal
498 * Fixed GIT submodules (HAH!)
503 * Changed; Express now using submodules again until a PM is adopted
504 * Changed; chat example using millisecond conversions from ext
509 * Added Request#pass() support (finds the next matching route, or the given path)
510 * Added Logger plugin (default "common" format replaces CommonLogger)
511 * Removed Profiler plugin
512 * Removed CommonLogger plugin
517 * Added seed.yml for kiwi package management support
518 * Added HTTP client query string support when method is GET. Closes #205
520 * Added support for arbitrary view engines.
521 For example "foo.engine.html" will now require('engine'),
522 the exports from this module are cached after the first require().
524 * Added async plugin support
526 * Removed usage of RESTful route funcs as http client
527 get() etc, use http.get() and friends
529 * Removed custom exceptions
534 * Added ext dependency (library of js extensions)
535 * Removed extname() / basename() utils. Use path module
536 * Removed toArray() util. Use arguments.values
537 * Removed escapeRegexp() util. Use RegExp.escape()
538 * Removed process.mixin() dependency. Use utils.mixin()
540 * Removed ElementCollection
541 * Shameless self promotion of ebook "Advanced JavaScript" (http://dev-mag.com) ;)
546 * Added flash() example to sample upload app
547 * Added high level restful http client module (express/http)
548 * Changed; RESTful route functions double as HTTP clients. Closes #69
549 * Changed; throwing error when routes are added at runtime
550 * Changed; defaulting render() context to the current Request. Closes #197
551 * Updated haml submodule
556 * Updated haml / sass submodules. Closes #200
557 * Added flash message support. Closes #64
558 * Added accepts() now allows multiple args. fixes #117
559 * Added support for plugins to halt. Closes #189
560 * Added alternate layout support. Closes #119
561 * Removed Route#run(). Closes #188
562 * Fixed broken specs due to use(Cookie) missing
567 * Added "plot" format option for Profiler (for gnuplot processing)
568 * Added request number to Profiler plugin
569 * Fixed binary encoding for multi-part file uploads, was previously defaulting to UTF8
570 * Fixed issue with routes not firing when not files are present. Closes #184
571 * Fixed process.Promise -> events.Promise
576 * Added parseParam() support for name[] etc. (allows for file inputs with "multiple" attr) Closes #180
577 * Added Both Cache and Session option "reapInterval" may be "reapEvery". Closes #174
578 * Added expiration support to cache api with reaper. Closes #133
579 * Added cache Store.Memory#reap()
580 * Added Cache; cache api now uses first class Cache instances
581 * Added abstract session Store. Closes #172
582 * Changed; cache Memory.Store#get() utilizing Collection
583 * Renamed MemoryStore -> Store.Memory
584 * Fixed use() of the same plugin several time will always use latest options. Closes #176
589 * Changed; Hooks (before / after) pass request as arg as well as evaluated in their context
590 * Updated node support to 0.1.27 Closes #169
591 * Updated dirname(__filename) -> __dirname
592 * Updated libxmljs support to v0.2.0
593 * Added session support with memory store / reaping
594 * Added quick uid() helper
595 * Added multi-part upload support
596 * Added Sass.js support / submodule
597 * Added production env caching view contents and static files
598 * Added static file caching. Closes #136
599 * Added cache plugin with memory stores
600 * Added support to StaticFile so that it works with non-textual files.
601 * Removed dirname() helper
602 * Removed several globals (now their modules must be required)
607 * Added view benchmarks; currently haml vs ejs
608 * Added Request#attachment() specs. Closes #116
609 * Added use of node's parseQuery() util. Closes #123
610 * Added `make init` for submodules
612 * Updated sample chat app to show messages on load
613 * Updated libxmljs parseString -> parseHtmlString
614 * Fixed `make init` to work with older versions of git
615 * Fixed specs can now run independant specs for those who cant build deps. Closes #127
616 * Fixed issues introduced by the node url module changes. Closes 126.
617 * Fixed two assertions failing due to Collection#keys() returning strings
618 * Fixed faulty Collection#toArray() spec due to keys() returning strings
619 * Fixed `make test` now builds libxmljs.node before testing