Wreck is Javascript library from Hapi-ecosystem to use HTTP requests. Basically it’s uses for Hapi.js projects. You can use it to write async/await code, because it’s promise-based library.
Wreck can be installed using NPM:
npm i wreck
or YARN:
yarn add wreck
const Wreck = require('wreck');
const example = async function () {
const res = await Wreck.request('get', 'https://jsonplaceholder.typicode.com/todos/1');
const body = await Wreck.read(res, {
json: true
});
console.log(body);
};
try {
example();
} catch (e) {
console.error(e);
}
The first argument of Wreck.request()
it’s the HTTP-method. It supports all popular: GET, POST, PUT, DELETE, default is GET. The second argument - the URI of the requested resource. The third - options object. Also, we can use the next methods to make specified requests:
Wreck.get()
Wreck.post()
Wreck.put()
Wreck.delete()
Wreck.patch()
To get JSON using Wreck we can use the json
property of options
object in .get
method. We need to set it to true
value:
const { res, payload } = await Wreck.get('https://jsonplaceholder.typicode.com/todos/1', {
json:true
})
console.log(payload);
The console will display:
{ userId: 1,
id: 1,
title: 'delectus aut autem',
completed: false }
To make request with query params, you can use the .payload
property:
const { res, payload } = await Wreck.get('https://jsonplaceholder.typicode.com/todos/1', {
payload:'a=1&b=2'
})
console.log(payload);
The querystring can be generated using the qs module.
We can make POST request with JSON payload in two ways:
const data = JSON.stringify({ a: 1, b: 2 });
const { res, payload } = await Wreck.post('https://jsonplaceholder.typicode.com/todos/1', {
payload: data
})
or using the request function:
const data = JSON.stringify({ a: 1, b: 2 });
const { res, payload } = await Wreck.request('post', 'https://jsonplaceholder.typicode.com/todos/1', {
payload: data
})
If your app keeps the Promises-style of code, you can easily use the following:
Wreck.get('https://jsonplaceholder.typicode.com/todos/1', {json: true})
.then(res => console.log(res.payload))
.catch(err => console.log(err));
The request headers object can be set in options
parameter:
const headers = {
'Content-Type': 'application/json'
};
const { res, payload } = await Wreck.request('get', 'https://jsonplaceholder.typicode.com/todos/1', {
headers
});
To make default headers, agents and other request/read objects, we can create a new instance of Wreck using the Wreck.defaults()
method.
const wreck = Wreck.defaults({
agents: {
http: new Http.Agent({
maxSockets: 10
})
},
headers: {
'Content-Type': 'application/json'
}
});
const { res, payload } = await Wreck.get('https://jsonplaceholder.typicode.com/todos/1');
It’s useful if you need to create multiple HTTP clients with different default data.
Learning Hapi.js? Buy my Hapi.js Handbook🔥
comments powered by Disqus