@apicase/adapter-xhr
XHR adapter for @apicase/core
Installation
- Install via NPM
npm install @apicase/adapter-xhr
- Import it
import { apicase } from '@apicase/core'
import xhr from '@apicase/adapter-xhr'
const xhrAPI = apicase(xhr)
We use node-fetch as polyfill for Node.js
Basic usage
const req = await xhrAPI({
  url: '/api/posts',
  method: 'GET',
  headers: { token: 'my_secret_token' },
  query: { userId: 1 }
})
if (req.success) { 
  console.log(req.result)
} else {
  console.error(req.result)
}
It will call:
var xhr = new XMLHttpRequest()
xhr.open('GET', '/api/posts?userId=1', true)
xhr.onload = function onload (e) {
  // See validators
  if (isSuccess(e.target, e)) {
    console.log(e)
  } else {
    console.error(e)
  }
}
xhr.setRequestHeader('token', 'my_secret_token')
xhr.send(null)
Advanced
Url params
Fetch adapter also has path-to-regexp to pass urls params smarter. Params are stored in params property
xhrAPI({
  url: '/api/posts/:id',
  params: { id: 1 }
})
// => GET /api/posts/1
Dynamic headers
If you want to create dynamic headers object so you can pass headers property as function that returns headers object
xhrAPI({
  url: '/api/posts',
  method: 'POST',
  headers: () => ({
    token: localStorage.getItem('token')
  })
})
It will be called every time you make a request so if token will be removed, header won't be sent too.
Validator function
I've added possibility to customizate resolve/reject apicase requests with validator callback.
It accepts xhr target and onload event
xhrAPI({
  url: '/api/posts',
  validateStatus: (status) => 
    status >= 200 && status <= 299
})
Default validator function is here:
function defaultValidator (status) {
  return status >= 200 && status < 300
}
Author
License
MIT