You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Express 5.0 is still in the beta release stage, but here is a preview of the changes that will be in the release and how to migrate your Express 4 app to Express 5.
12
+
Express 5 is not very different from Express 4; although it maintains the same basic API, there are still changes that break compatibility with the previous version. Therefore, an application built with Express 4 might not work if you update it to use Express 5.
13
13
14
-
To install the latest beta and to preview Express 5, enter the following command in your application root directory:
14
+
To install this version, you need to have a Node.js version 18 or higher. Then, execute the following command in your application directory:
@@ -94,13 +102,22 @@ Express 5 no longer supports the signature `res.json(obj, status)`. Instead, set
94
102
95
103
Express 5 no longer supports the signature `res.jsonp(obj, status)`. Instead, set the status and then chain it to the `res.jsonp()` method like this: `res.status(status).jsonp(obj)`.
Express 5 no longer supports the signature `res.redirect(url, status)`. Instead, use the following signature: `res.redirect(status, url)`.
108
+
109
+
110
+
<h4id="magic-redirect">res.redirect('back') and res.location('back')</h4>
111
+
112
+
Express 5 no longer supports the magic string `back` in the `res.redirect()` and `res.location()` methods. Instead, use the `req.get('Referrer') || '/'` value to redirect back to the previous page. In Express 4, the res.`redirect('back')` and `res.location('back')` methods were deprecated.
113
+
97
114
<h4id="res.send.body">res.send(body, status)</h4>
98
115
99
116
Express 5 no longer supports the signature `res.send(obj, status)`. Instead, set the status and then chain it to the `res.send()` method like this: `res.status(status).send(obj)`.
100
117
101
118
<h4id="res.send.status">res.send(status)</h4>
102
119
103
-
Express 5 no longer supports the signature <code>res.send(<em>status</em>)</code>, where _`status`_ is a number. Instead, use the `res.sendStatus(statusCode)` function, which sets the HTTP response header status code and sends the text version of the code: "Not Found", "Internal Server Error", and so on.
120
+
Express 5 no longer supports the signature `res.send(status)`, where `status` is a number. Instead, use the `res.sendStatus(statusCode)` function, which sets the HTTP response header status code and sends the text version of the code: "Not Found", "Internal Server Error", and so on.
104
121
If you need to send a number by using the `res.send()` function, quote the number to convert it to a string, so that Express does not interpret it as an attempt to use the unsupported old signature.
105
122
106
123
<h4id="res.sendfile">res.sendfile()</h4>
@@ -113,26 +130,42 @@ The `res.sendfile()` function has been replaced by a camel-cased version `res.se
113
130
114
131
Path route matching syntax is when a string is supplied as the first parameter to the `app.all()`, `app.use()`, `app.METHOD()`, `router.all()`, `router.METHOD()`, and `router.use()` APIs. The following changes have been made to how the path string is matched to an incoming request:
115
132
116
-
- Add new `?`, `*`, and `+` parameter modifiers.
117
-
- Matching group expressions are only RegExp syntax.
118
-
*`(*)` is no longer valid and must be written as `(.*)`, for example.
119
-
- Named matching groups no longer available by position in `req.params`.
120
-
*`/:foo(.*)` only captures as `req.params.foo` and not available as `req.params[0]`.
121
-
- Regular expressions can only be used in a matching group.
122
-
*`/\\d+` is no longer valid and must be written as `/(\\d+)`.
123
-
- Special `*` path segment behavior removed.
124
-
*`/foo/*/bar` will match a literal `*` as the middle segment.
133
+
- The wildcard `*` must have a name, matching the behavior of parameters `:`, use `/*splat` instead of `/*`
134
+
- The optional character `?` is no longer supported, use braces instead: `/:file{.:ext}`.
135
+
- Regexp characters are not supported. For example:
- Some characters have been reserved to avoid confusion during upgrade (`()[]?+!`), use `\` to escape them.
149
+
- Parameter names now support valid JavaScript identifiers, or quoted like `:"this"`.
125
150
126
151
<h4id="rejected-promises">Rejected promises handled from middleware and handlers</h4>
127
152
128
153
Request middleware and handlers that return rejected promises are now handled by forwarding the rejected value as an `Error` to the error handling middleware. This means that using `async` functions as middleware and handlers are easier than ever. When an error is thrown in an `async` function or a rejected promise is `await`ed inside an async function, those errors will be passed to the error handler as if calling `next(err)`.
129
154
130
155
Details of how Express handles errors is covered in the [error handling documentation](/en/guide/error-handling.html).
The `express.urlencoded` method makes the `extended` option `false` by default.
160
+
132
161
<h4id="app.router">app.router</h4>
133
162
134
163
The `app.router` object, which was removed in Express 4, has made a comeback in Express 5. In the new version, this object is a just a reference to the base Express router, unlike in Express 3, where an app had to explicitly load it.
135
164
165
+
<h4id="req.body">req.body</h4>
166
+
167
+
The `req.body` property returns `undefined` when the body has not been parsed. In Express 4, it returns `{}` by default.
168
+
136
169
<h4id="req.host">req.host</h4>
137
170
138
171
In Express 4, the `req.host` function incorrectly stripped off the port number if it was present. In Express 5, the port number is maintained.
@@ -141,8 +174,24 @@ In Express 4, the `req.host` function incorrectly stripped off the port number i
141
174
142
175
The `req.query` property is no longer a writable property and is instead a getter. The default query parser has been changed from "extended" to "simple".
143
176
177
+
<h4id="res.clearCookie">res.clearCookie</h4>
178
+
179
+
The `res.clearCookie` method ignores the `maxAge` and `expires` options provided by the user.
180
+
181
+
<h4id="res.status">res.status</h4>
182
+
183
+
The `res.status` method only accepts integers in the range of `100` to `999`, following the behavior defined by Node.js, and it returns an error when the status code is not an integer.
184
+
185
+
<h4id="res.query">res.vary</h4>
186
+
187
+
The `res.vary` throws an error when the `field` argument is missing. In Express 4, if the argument was omitted, it gave a warning in the console
188
+
144
189
<h3>Improvements</h3>
145
190
146
191
<h4id="res.render">res.render()</h4>
147
192
148
193
This method now enforces asynchronous behavior for all view engines, avoiding bugs caused by view engines that had a synchronous implementation and that violated the recommended interface.
0 commit comments