The vue-resource library is a useful HTTP client library for Vue apps.
It’s a good alternative to Axios for making requests.
In this article, we’ll look at how to use it to make HTTP requests with a Vue app.
Installation
We can install the library by running:
yarn add vue-resource
or
npm install vue-resource
It can also be included with a script tag:
<script src="https://cdn.jsdelivr.net/npm/vue-resource@1.5.1"></script>
Making Requests
To make a request, we register the plugin in main.js
by writing:
import Vue from "vue";
import App from "./App.vue";
import VueResource from "vue-resource";
Vue.use(VueResource);
Vue.config.productionTip = false;
new Vue({
render: (h) => h(App)
}).$mount("#app");
Then to make the request, we write:
<template>
<div id="app">{{response}}</div>
</template>
<script>
export default {
name: "App",
data() {
return {
response: {}
};
},
async beforeMount() {
const { bodyText } = await this.$http.get(
"https://api.agify.io//?name=michael"
);
this.response = JSON.parse(bodyText);
}
};
</script>
We call this.$http.get
to make a get request to an endpoint.
To make a post request, we can write:
<template>
<div id="app">{{response}}</div>
</template>
<script>
export default {
name: "App",
data() {
return {
response: {}
};
},
async beforeMount() {
const { bodyText } = await this.$http.post(
"https://jsonplaceholder.typicode.com/posts",
{
title: "foo",
body: "bar",
userId: 1
}
);
this.response = JSON.parse(bodyText);
}
};
</script>
We just pass the request body into the 2nd argument.
Getting Response
We can get the response header from the headers
property:
"<template>
<div id="app">{{response}}</div>
</template>
<script>
export default {
name: "App",
data() {
return {
response: {}
};
},
async beforeMount() {
const response = await this.$http.post(
"https://jsonplaceholder.typicode.com/posts",
{
title: "foo",
body: "bar",
userId: 1
}
);
console.log(response.headers.get("Expires"));
this.response = JSON.parse(response.bodyText);
}
};
</script>
We pass the header key to the get
method to get its value.
Getting a Blob
We can get a blob with the this.$http.get
method to get a blob.
All we have to do is set the responseType
to 'blob'
:
"<template>
<div id="app"></div>
</template>
<script>
export default {
name: "App",
data() {
return {
response: {}
};
},
async beforeMount() {
const response = await this.$http.get(
"https://picsum.photos/id/23/200/300",
{ responseType: "blob" }
);
const blob = await response.blob();
console.log(blob);
}
};
</script>
Interceptors
We add an interceptor to set the request header for all requests.
We can set the request headers globally by writing:
main.js
import Vue from "vue";
import App from "./App.vue";
import VueResource from "vue-resource";
Vue.use(VueResource);
Vue.config.productionTip = false;
Vue.http.interceptors.push((request) => {
request.headers.set("X-CSRF-TOKEN", "TOKEN");
request.headers.set("Authorization", "Bearer TOKEN");
});
new Vue({
render: (h) => h(App)
}).$mount("#app");
App.vue
<template>
<div id="app">{{response}}</div>
</template>
<script>
export default {
name: "App",
data() {
return {
response: {}
};
},
async beforeMount() {
const { bodyText } = await this.$http.post(
"https://jsonplaceholder.typicode.com/posts",
{
title: "foo",
body: "bar",
userId: 1
}
);
this.response = JSON.parse(bodyText);
}
};
</script>
We have the Vue.http.interceptors.push
method to modify requests with the request.headers.set
method.
Conclusion
We can use the vue-resource library to make requests in a Vue app.