Express 3.0
Express 3.0 is here (finally) and while it is mostly a refinement release, between it and Connect 2.x there are some helpful new features. Sorry for the massive delay! Been busy and wanted to get a reasonable amount of documentation up on expressjs.com before releasing, more docs will be coming soon.
Keep in mind that the goal of Express is to aid you with HTTP, not to become a framework super-power like Rails, so this update may be underwhelming to some since it’s merely a refinement.
Connect 2.x
Changes introduced by Connect 2.x:
- added
err.statussupport to Connect’s default end-point - added
session()“proxy” setting to trust “X-Forwarded-Proto” - added
cookieSession()middleware - added
compress()middleware for gzipped responses - added
multipart()middleware - added
json()middleware - added
urlencoded()middleware - added
limitoption to the three above middleware - added
deferoption tomultipart()to listen on formidable’s events - added
debug()instrumentation to aid in debugging - changed
basicAuth()’sreq.remoteUsertoreq.user - changed
session()to only set-cookie on modification (hashed session json) - changed
bodyParser()to be an aggregate ofjson(),multipart()andurlencoded() - moved many cookie-related utils into npm
- moved
static()’s logic into a separate npm module named “send” - increase perf ~%20 by memoizing url parsing
- removed
router()middleware - fixed default encoding for
logger(), now “utf8” instead of “ascii” fixed mount-path case-sensitivity
Connect docs are available at http://www.senchalabs.org/connect/, and will eventually be mirrored on expressjs.com as well for convenience, along with usage guides.
Express 3.x
Changes introduced by Express 3.x:
- added several new examples in
./examples - added unit testing for the examples (most of them at least)
- added
res.jsonp()to explicitly opt-in to JSONP support - added ETags and conditional-GET handling to
res.send()responses - added “jsonp callback name” setting
- added support for status code as first or second arg to
res.send()andres.redirect() - added
req.range(size)to parseRangeheader fields - added
req.authfor basic auth - added
res.links(obj)to set response theLinkheader field for pagination - added
res.format(obj)for content-negotiation - added
req.freshfor conditional-GETs - added
req.stalefor conditional-GETs - added mount-point relative redirection support to
res.redirect() - added
req.ipfor the remote address (supporting reverse proxies) - added
req.ipsfor remote address(es) (supporting reverse proxies) - added
[]support in jsonp callback - added
app.get(name)to complimentapp.set(name, val) - added
app.engine()to register template engines (replacesapp.register()) - added
req.subdomainsto return an array of subdomains - added
req.protocolto return the request protocol string (“http” or “https”) - added
req.secureto assert thatreq.protocolis “https” - added
req.pathto return the parsed url’s pathname - added
req.hostto return hostname (Hostvoid of port) - added
debug()instrumentation to aid debugging - added
req.accepts() - added
req.acceptsLanguage() - added
req.acceptsCharset() - added
req.accepted - added
req.acceptedLanguages - added
req.acceptedCharsets - added “json replacer” setting to manipulate json responses (remove private keys etc)
- added “json spaces” setting to compress or expand json as you like (defaults to
2in dev) - added
express.applicationprototype - added
express.requestprototype - added
express.responseprototype - added
app.render()for app-level templates - added
res.type()to replace oldres.contentType() - added
{ signed: true }option tores.cookie() - added async signature to
res.render(), engines in consolidate.js work OOTB - removed
partial() - removed express-level layout support (engines provide similar)
- renamed “case sensitive routes” to “case sensitive routing”
- removed
res.signedCookie() - removed “root” setting
- removed
res.redirect('home')support - removed
req.notify() - removed
app.register() - removed
app.redirect() - removed
app.is() - removed
app.helpers() removed
app.dynamicHelpers()Head over to the New Features in 3.x wiki page for a more comprehensive list of additions, or to 3.x migration to help you upgrade if you wish to do so.