Hapi.js is a small Node framework for developing back end web apps.
In this article, we’ll look at how to create back end apps with Hapi.js.
Caching
We can control caching by setting some properties in our routes.
For example, we can write:
const Hapi = require('@hapi/hapi');
const init = async () => {
const server = Hapi.server({
port: 3000,
host: '0.0.0.0'
});
server.route({
path: '/{ttl?}',
method: 'GET',
handler(request, h) {
const response = h.response({
hello: 'world'
});
if (request.params.ttl) {
response.ttl(request.params.ttl);
}
return response;
},
options: {
cache: {
expiresIn: 30 * 1000,
privacy: 'private'
}
}
});
await server.start();
console.log('Server running on %s', server.info.uri);
};
process.on('unhandledRejection', (err) => {
console.log(err);
process.exit(1);
});
init();
We call the route with server.route
.
Then we call response.ttl
to set the duration of the caching of the response.
We also set the options.cache.expiresIn
property to set when the cache expires.
And privacy
set whether the cache is private.
Last-Modified Header
We can also set the Last-Modified
header added automatically to the response.
For instance, we can write:
const Hapi = require('@hapi/hapi');
const init = async () => {
const server = Hapi.server({
port: 3000,
host: '0.0.0.0'
});
server.route({
path: '/{ttl?}',
method: 'GET',
handler(request, h) {
return h.response({ hello: 'world' })
.header('Last-Modified', lastModified.toUTCString());
},
options: {
cache: {
expiresIn: 30 * 1000,
privacy: 'private'
}
}
});
await server.start();
console.log('Server running on %s', server.info.uri);
};
process.on('unhandledRejection', (err) => {
console.log(err);
process.exit(1);
});
init();
We call header
with the Last-Modified
key and the and the value
Cookies
We can add a cookie by calling the h.state
method.
For instance, we can write:
const Hapi = require('@hapi/hapi');
const init = async () => {
const server = Hapi.server({
port: 3000,
host: '0.0.0.0'
});
server.route({
path: '/',
method: 'GET',
async handler (request, h) {
h.state('data', { firstVisit: false });
return h.response('Hello');
},
});
await server.start();
console.log('Server running on %s', server.info.uri);
};
process.on('unhandledRejection', (err) => {
console.log(err);
process.exit(1);
});
init();
We call h.state
with the key and value.
Also, we can write:
const Hapi = require('@hapi/hapi');
const init = async () => {
const server = Hapi.server({
port: 3000,
host: '0.0.0.0'
});
server.route({
path: '/',
method: 'GET',
async handler (request, h) {
return h.response('Hello').state('data', { firstVisit: false });
},
});
await server.start();
console.log('Server running on %s', server.info.uri);
};
process.on('unhandledRejection', (err) => {
console.log(err);
process.exit(1);
});
init();
to do the same thing.
We can override the options by writing:
const Hapi = require('@hapi/hapi');
const init = async () => {
const server = Hapi.server({
port: 3000,
host: '0.0.0.0'
});
server.route({
path: '/',
method: 'GET',
async handler (request, h) {
return h.response('Hello').state('data', 'test', { encoding: 'none' });
},
});
await server.start();
console.log('Server running on %s', server.info.uri);
};
process.on('unhandledRejection', (err) => {
console.log(err);
process.exit(1);
});
init();
We set the encoding
option by calling the state
method with a 3rd argument.
Conclusion
We can add caching and set cookies in our web app with Hapi.