mirror of
https://github.com/expressjs/expressjs.com.git
synced 2026-02-22 03:51:33 +00:00
docs: document req.params changes in 5.x (#2092)
Co-authored-by: krzysdz <krzysdz@users.noreply.github.com> Co-authored-by: Sebastian Beltran <bjohansebas@gmail.com>
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
<h3 id='req.params'>req.params</h3>
|
||||
|
||||
This property is an object containing properties mapped to the [named route "parameters"](/{{ page.lang }}/guide/routing.html#route-parameters). For example, if you have the route `/user/:name`, then the "name" property is available as `req.params.name`. This object defaults to `{}`.
|
||||
This property is an object containing properties mapped to the [named route "parameters"](/{{ page.lang }}/guide/routing.html#route-parameters). For example, if you have the route `/user/:name`, then the "name" property is available as `req.params.name`. This object defaults to `Object.create(null)` when using string paths, but remains a standard object with a normal prototype when the path is defined with a regular expression.
|
||||
|
||||
```js
|
||||
// GET /user/tj
|
||||
@@ -8,6 +8,18 @@ console.dir(req.params.name)
|
||||
// => "tj"
|
||||
```
|
||||
|
||||
Properties corresponding to wildcard parameters are arrays containing separate path segments split on `/`:
|
||||
|
||||
```js
|
||||
app.get('/files/*file', (req, res) => {
|
||||
console.dir(req.params.file)
|
||||
// GET /files/note.txt
|
||||
// => [ 'note.txt' ]
|
||||
// GET /files/images/image.png
|
||||
// => [ 'images', 'image.png' ]
|
||||
})
|
||||
```
|
||||
|
||||
When you use a regular expression for the route definition, capture groups are provided as integer keys using `req.params[n]`, where `n` is the n<sup>th</sup> capture group.
|
||||
|
||||
```js
|
||||
|
||||
@@ -72,6 +72,7 @@ You can find the list of available codemods [here](https://github.com/expressjs/
|
||||
<li><a href="#app.router">app.router</a></li>
|
||||
<li><a href="#req.body">req.body</a></li>
|
||||
<li><a href="#req.host">req.host</a></li>
|
||||
<li><a href="#req.params">req.params</a></li>
|
||||
<li><a href="#req.query">req.query</a></li>
|
||||
<li><a href="#res.clearCookie">res.clearCookie</a></li>
|
||||
<li><a href="#res.status">res.status</a></li>
|
||||
@@ -515,6 +516,49 @@ The `req.body` property returns `undefined` when the body has not been parsed. I
|
||||
|
||||
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.
|
||||
|
||||
<h3 id="req.params">req.params</h3>
|
||||
|
||||
The `req.params` object now has a **null prototype** when using string paths. However, if the path is defined with a regular expression, `req.params` remains a standard object with a normal prototype. Additionally, there are two important behavioral changes:
|
||||
|
||||
**Wildcard parameters are now arrays:**
|
||||
|
||||
Wildcards (e.g., `/*splat`) capture path segments as an array instead of a single string.
|
||||
|
||||
```js
|
||||
app.get('/*splat', (req, res) => {
|
||||
// GET /foo/bar
|
||||
console.dir(req.params)
|
||||
// => [Object: null prototype] { splat: [ 'foo', 'bar' ] }
|
||||
})
|
||||
```
|
||||
|
||||
**Unmatched parameters are omitted:**
|
||||
|
||||
In Express 4, unmatched wildcards were empty strings (`''`) and optional `:` parameters (using `?`) had a key with value `undefined`. In Express 5, unmatched parameters are completely omitted from `req.params`.
|
||||
|
||||
```js
|
||||
// v4: unmatched wildcard is empty string
|
||||
app.get('/*', (req, res) => {
|
||||
// GET /
|
||||
console.dir(req.params)
|
||||
// => { '0': '' }
|
||||
})
|
||||
|
||||
// v4: unmatched optional param is undefined
|
||||
app.get('/:file.:ext?', (req, res) => {
|
||||
// GET /image
|
||||
console.dir(req.params)
|
||||
// => { file: 'image', ext: undefined }
|
||||
})
|
||||
|
||||
// v5: unmatched optional param is omitted
|
||||
app.get('/:file{.:ext}', (req, res) => {
|
||||
// GET /image
|
||||
console.dir(req.params)
|
||||
// => [Object: null prototype] { file: 'image' }
|
||||
})
|
||||
```
|
||||
|
||||
<h3 id="req.query">req.query</h3>
|
||||
|
||||
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".
|
||||
|
||||
Reference in New Issue
Block a user