The request object lets us get the information about requests made from the client in middlewares and route handlers.
In this article, we’ll look at the properties of Express’s request object in detail, including query strings, URL parameters, and signed cookies.
Request Object
The req
parameter we have in the route handlers above is the req
object.
It has some properties that we can use to get data about the request that’s made from the client-side. The more important ones are listed below.
req.originalUrl
The originalUrl
property has the original request URL.
For example, we can use it as follows:
const express = require('express');
const bodyParser = require('body-parser');
const app = express();
app.get('/', (req, res) => {
res.send(req.originalUrl);
})
app.listen(3000);
Then when we have the request with query string /?foo=bar
, we get back /?foo=bar
.
req.params
params
property has the request parameters from the URL.
For example, if we have:
const express = require('express')
const app = express()
app.use(express.json())
app.use(express.urlencoded({ extended: true }))
app.get('/:name/:age', (req, res) => {
res.json(req.params)
})
app.listen(3000, () => console.log('server started'));
Then when we pass in /john/1
as the parameter part of the URL, then we get:
{
"name": "john",
"age": "1"
}
as the response from the route above.
req.path
The path
property has the path part of the request URL.
For instance, if we have:
const express = require('express');
const bodyParser = require('body-parser');
const app = express();
app.get('/:name/:age', (req, res) => {
res.send(req.path);
})
app.listen(3000);
and make a request to /foo/1
, then we get back the same thing in the response.
req.protocol
We can get the protocol string with the protocol
property.
For example, if we have:
const express = require('express');
const bodyParser = require('body-parser');
const app = express();
app.get('/', (req, res) => {
res.send(req.protocol);
})
app.listen(3000);
Then when we make a request through HTTP we get backhttp
.
req.query
The query
property gets us the query string from the request URL parsed into an object.
For example, if we have:
const express = require('express')
const app = express()
app.use(express.json())
app.use(express.urlencoded({ extended: true }))
app.get('/', (req, res) => {
res.json(req.query)
})
app.listen(3000, () => console.log('server started'));
Then when we append ?name=john&age=1
to the end of the hostname, then we get back:
{
"name": "john",
"age": "1"
}
from the response.
req.route
We get the current matched route with the route
property.
For example, we can use it as follows:
const express = require('express');
const bodyParser = require('body-parser');
const app = express();
app.get('/', (req, res) => {
console.log(req.route);
res.json(req.route);
})
app.listen(3000);
Then we get something like the following from the console.log
:
Route {
path: '/',
stack:
[ Layer {
handle: [Function],
name: '<anonymous>',
params: undefined,
path: undefined,
keys: [],
regexp: /^\/?$/i,
method: 'get' } ],
methods: { get: true } }
req.secure
A boolean property that indicates if the request is made with via HTTPS.
For example, given that we have:
const express = require('express');
const bodyParser = require('body-parser');
const app = express();
app.get('/', (req, res) => {
res.json(req.secure);
})
app.listen(3000);
Then we get false
if the request is made via HTTP.
req.signedCookies
The signedCookies
object has the cookie with the value deciphers from the hashed value.
For example, we can use it as follows:
const express = require('express');
const bodyParser = require('body-parser');
const cookieParser = require('cookie-parser');
const app = express();
app.use(cookieParser('secret'));
app.get('/cookie', (req, res, next) => {
res.cookie('name', 'foo', { signed: true })
res.send();
})
app.get('/', (req, res) => {
res.send(req.signedCookies.name);
})
app.listen(3000);
In the code above, we have the /cookie
route to send the cookie from our app to the client. Then we can get the value from the client and then make a request to the /
route with the Cookie
header with name
as the key and the signed value from the /cookie
route as the value.
For example, it would look something like:
name=s%3Afoo.dzukRpPHVT1u4g9h6l0nV6mk9KRNKEGuTpW1LkzWLbQ
Then we get back foo
from the /
route after the signed cookie is decoded.
req.stale
stale
is the opposite of fresh
. See [req.fresh](https://expressjs.com/en/4x/api.html#req.fresh)
for more details.
req.subdomains
We can get an array of subdomains in the domain name of the request with the subdomains
property.
For example, we can use it as follows:
const express = require('express');
const bodyParser = require('body-parser');
const app = express();
app.get('/', (req, res) => {
res.send(req.subdomains);
})
app.listen(3000);
Then when we make a request to the /
route, we get something like:
["beautifulanxiousflatassembler--five-nine"]
req.xhr
A boolean property that’s true
is X-Requested-With
request header field is XMLHttpRequest
.
For example, we can use it as follows:
const express = require('express');
const bodyParser = require('body-parser');
const app = express();
app.get('/', (req, res) => {
res.send(req.xhr);
})
app.listen(3000);
Then when we make a request to the/
route with the X-Requested-With
header set to XMLHttpRequest
, we get back true
.
Conclusion
There’re many properties in the request object to get many things.
We can get signed cookies with the Cookie Parser middleware. Query strings and URL parameters can access in various form with query
, params
, and route
properties.
Also, we can get parts of the subdomain with the subdomains
property.