Advanced
Advanced concepts.
Hooks
Hooks can be used to globally intercept HTTP request and responses. E.g. if you wish to log errors, display a toast on error or need to dynamically modify requests.
See the API reference for the list of lifecycle hooks the HTTP module provides
These functions don't have to return anything by default.
Register Hooks
For registering hooks, you have to create a nuxt plugin:
nuxt.config.js
export default { plugins: [ '~/plugins/http' ]}
plugins/http.js
import ky from 'ky-universal'export default function ({ $http }) { $http.onRequest(config => { console.log('Making request to ' + config.url) }) $http.onRetry(async (request, options, errors, retryCount) => { const token = await ky('https://example.com/refresh-token') options.header.set('Authorization', `Bearer ${token}`) }) $http.onError(error => { if (error.statusCode === 500) { alert('Request Error!') } // Tip: error.response will be undefined if the connection dropped to the server // Tip: You can use error.response.data to get response message // Tip: You can return an object or Promise as fallback response to avoid rejection })}
Header Helpers
setHeader(name, value)
Globally set a header to all subsequent requests.
This method should probably not be called inside hooks as it is global and will apply to all future requests
Please note that HTTP headers are case-insensitive. Therefore all header names will be converted to lower-case to make sure that if you set the same header twice but with different casing the last one set will be used.See also this comment in the Ky repository for more information
Parameters:
- name: Name of the header
- value: Value of the header
// Add header `Authorization: 123` to all requeststhis.$http.setHeader('Authorization', '123')// Override `Authorization` header with new valuethis.$http.setHeader('Authorization', '456')// Add header `Content-Type: application/x-www-form-urlencoded`this.$http.setHeader('Content-Type', 'application/x-www-form-urlencoded')// Remove default Content-Type headerthis.$http.setHeader('Content-Type', false)
setToken(token, type)
Globally set Authorization
header to all subsequent requests.
This is a global method, you only have to call it once after which all future requests will include the token
Parameters:
- token: Authorization token
- type: Authorization token prefix, usually
Bearer
. Defaults to nothing
// Adds header: `Authorization: 123` to all requeststhis.$http.setToken('123')// Overrides `Authorization` header with new valuethis.$http.setToken('456')// Adds header: `Authorization: Bearer 123` to all requeststhis.$http.setToken('123', 'Bearer')// Removes default Authorization headerthis.$http.setToken(false)
Create new instance based on defaults
If you need to create your own ky instance which based on $http
defaults, you can use the create(options)
method.
plugins/github.js
export default function ({ $http, env }, inject) { // Create a custom HTTP instance const $github = $http.create({ // See https://github.com/sindresorhus/ky#options }) // Set baseURL to something different $github.setBaseURL('https://api.github.com') $github.setToken(env.GITHUB_TOKEN, 'token') // Inject to context as $github inject('github', $github)}