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 various properties of the response object, including sending the Links
response header, redirect to different paths and URLs, and rendering HTML.
Methods
res.links(links)
The links
method joins an object with links together and sends the Link
response header with the links joined together.
For example, we can use it as follows:
const express = require('express');
const bodyParser = require('body-parser');
const app = express();app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
app.get('/', (req, res) => {
res
.links({
next: 'http://foo.com?page=1',
last: 'http://foo.com?page=2'
})
.send();
});
app.listen(3000, () => console.log('server started'));
Then we get that the Link
response header has the value:
<http://foo.com?page=1>; rel="next", <http://foo.com?page=2>; rel="last"
when we make a request to the /
path.
res.location(path)
The location
method sends the Location
response header with the specified path
parameter as the value.
For example, we can use it as follows:
const express = require('express');
const bodyParser = require('body-parser');
const app = express();app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
app.get('/', (req, res) => {
res
.location('http://medium.com')
.send();
});
app.listen(3000, () => console.log('server started'));
Then we get:
http://medium.com
as the value of the Location
response header when we make a request to the /
route.
res.redirect([status,] path)
The redirect
method redirects to the URL or path specified with the specified status
. If no status is specified, the default is 302.
For example, we can use it as follows to redirect to another route:
const express = require('express');
const bodyParser = require('body-parser');
const app = express();app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
app.get('/', (req, res) => {
res.redirect('/bar');
});
app.get('/bar', (req, res) => {
res.send('bar');
});
app.listen(3000, () => console.log('server started'));
Then we should see bar
since we redirected to the bar
route.
We can specify a status code as follows:
const express = require('express');
const bodyParser = require('body-parser');
const app = express();app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
app.get('/', (req, res) => {
res.redirect(301, '/bar');
});
app.get('/bar', (req, res) => {
res.send('bar');
});
app.listen(3000, () => console.log('server started'));
We can also redirect to a full URL:
const express = require('express');
const bodyParser = require('body-parser');
const app = express();
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
app.get('/', (req, res) => {
res.redirect('http://google.com');
});
app.listen(3000, () => console.log('server started'));
Then when we go to /
in our browser, we get Google displayed in our browser.
We can redirect back to the referrer with:
res.redirect('back')
and we can also redirect to a higher level URL, which defaults to /
.
We can use it as follows:
const express = require('express');
const bodyParser = require('body-parser');
const app = express();
const post = express.Router();app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
post.get('/', (req, res) => {
res.redirect('..');
});
app.get('/', (req, res) => {
res.send('hi');
});
app.use('/post', post);app.listen(3000, () => console.log('server started'));
Then we get hi
if we go to /post
since we see redirect to '..'
.
res.render(view [, locals] [, callback])
res.render
lets us render HTML using a template. Once we set the HTML template engine, we can use template files to display the results.
The locals
object has the properties that we can access in the templates.
And the callback
can get the error and the rendered HTML string.
The view
argument has the string with the template’s file name. The view’s folder is set before we can call res.render
so we don’t need the full folder name.
For example, we can use the Pug template to render templates as follows:
const express = require('express')
const app = express()
app.use(express.json())
app.use(express.urlencoded({ extended: true }))
app.set('views', './views');
app.set('view engine', 'pug');
app.get('/', (req, res, next) => {
res.render('index', { pageTitle: 'Hello', pageMessage: 'Hello there!' });
})
app.listen(3000, () => console.log('server started'));
Then we can add a template file called index.pug
to the views
folder as follows:
html
head
title= pageTitle
body
h1= pageMessage
Then we get:
We can also pass in a callback to the render method as follows:
const express = require('express')
const app = express()
app.use(express.json())
app.use(express.urlencoded({ extended: true }))
app.set('views', './views');
app.set('view engine', 'pug');app.get('/', (req, res, next) => {
res.render(
'index',
{ pageTitle: 'Hello', pageMessage: 'Hello there!' },
(err, html) => {
if (err) {
next(err);
}
else {
console.log(html);
}
}
);
})
app.listen(3000);
Then we get the rendered HTML from the console.log
:
<html><head><title>Hello</title></head><body><h1>Hello there!</h1></body></html>
Any error will be sent to the Express error handler with the next
function.
Conclusion
We can render HTML results with render
method.
With the redirect
method, we can redirect to different paths and URLs with the different response code.
We can use the links
and locations
methods to send the Links
and Locations
response headers respectively.