The Express response object lets us send a response to the client.
Various kinds of responses like strings, JSON, and files can be sent. Also, we can send various headers and status code to the client in addition to the body.
In this article, we’ll look at how to set headers and send status codes with other items, including the set
method for setting headers, status
for setting response status code, type
for setting the Content-Type
header value, and the vary
method for setting the Vary
header value.
Methods
res.set(field [, value])
We can use the set
method to set response headers before sending a response.
For example, we can use it as follows:
const express = require('express');
const path = require('path');
const app = express()
app.use(express.json())
app.use(express.urlencoded({ extended: true }))
app.get('/', (req, res, next) => {
res.set({
'Content-Type': 'text/plain',
'Content-Length': '100'
})
.send();
})
app.listen(3000);
Then when we make a request to /
, we get that the Content-Length
header is set to 100 and the Content-Type
is set to text/plain
.
Note that we have to call send
to send the response.
We can verify this with an HTTP client like Postman.
res.status(code)
We can call the status
method to add a status code before sending the response.
For example, we can use it as follows:
const express = require('express');
const path = require('path');
const app = express()
app.use(express.json())
app.use(express.urlencoded({ extended: true }))
app.get('/', (req, res, next) => {
res.status(400).send('Bad Request');
})
app.listen(3000);
Then we get Bad Request
displayed and the 400 response code.
res.type(type)
The type
method sets the Content-Type
HTTP header to the MIME type determined by the mime.lookup()
method from the node-mime
package for the specified type.
If type
contains the /
character, then it sets the Content-Type
to type
.
This method doesn’t send the response.
For example, we can use it as follows:
const express = require('express');
const path = require('path');
const app = express()
app.use(express.json())
app.use(express.urlencoded({ extended: true }))
app.get('/', (req, res) => {
res.type('.html').send();
})
app.listen(3000);
Then we get that the Content-Type
response header has the value text/html; charset=utf-8
.
If we have:
const express = require('express');
const path = require('path');
const app = express()
app.use(express.json())
app.use(express.urlencoded({ extended: true }))
app.get('/', (req, res) => {
res.type('.png').send();
})
app.listen(3000);
Then we get image/png
instead of text/html
for the value of Content-Type
.
res.vary(field)
The vary
method adds the field to the Vary
response header if it’s not already there.
For example, we can use it as follows:
const express = require('express');
const path = require('path');
const app = express()
app.use(express.json())
app.use(express.urlencoded({ extended: true }))
app.get('/', (req, res) => {
res.vary('User-Agent').send();
})
app.listen(3000);
Then we have the Vary
response header set to User-Agent
.
The Vary
header lets us to content negotiation, which is a mechanism for serving different kinds of data with the same URL.
The user agent can specify what’s best for the server.
The Vary
header indicates which headers it’s used for content negotiation.
Since we have the Vary
header set to User-Agent
, our app uses the User-Agent
header to serve different kinds of content according to the user agent of the browser.
Conclusion
The set
method lets us set headers before sending our response. It takes an object with the response headers that we want to send.
status
method is for setting a response status code before sending it. We can chain it with the response body.
The type
method is for setting the Content-Type
header value. The returned MIME-type is determined by the mime.lookup()
method from node-mime
.
The vary
method for setting the Vary
header value. The Vary
header is used for content negotiation, which is serving different content according to the field specified by the Vary
header’s value with the same URL.