You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
106 lines
3.4 KiB
Markdown
106 lines
3.4 KiB
Markdown
# axios-get-json-response
|
|
|
|
A simple utility for checking status codes and parsing JSON data from Axios responses. While Axios *can* do this by itself, it doesn't document any distinguishable error types, and so when an error occurs you can never know *what* went wrong.
|
|
|
|
This library fixes that, by giving you two distinct error types. Hopefully this functionality eventually makes it into Axios itself.
|
|
|
|
Both error types correctly inherit from Error, and therefore a) have stacktraces, and b) can be used with `instanceof` as well as things based on it, like Bluebird's [filtered `.catch`](http://bluebirdjs.com/docs/api/catch.html#filtered-catch).
|
|
|
|
## Examples
|
|
|
|
An existent and valid URL:
|
|
|
|
```js
|
|
"use strict";
|
|
|
|
const axios = require("axios");
|
|
const Promise = require("bluebird");
|
|
const getJson = require("axios-get-json-response");
|
|
|
|
Promise.try(() => {
|
|
return axios.get("http://cryto.net/test.json", getJson.axiosConfiguration); // {"hello": "world"}
|
|
}).then((response) => {
|
|
let parsedJson = getJson.parse(response);
|
|
|
|
console.log(parsedJson); // { hello: 'world' }
|
|
});
|
|
```
|
|
|
|
Using `axios.create` to set the custom configuration as a default, and showing the result for an existent URL that is *not* valid JSON:
|
|
|
|
```js
|
|
"use strict";
|
|
|
|
const axios = require("axios");
|
|
const Promise = require("bluebird");
|
|
const getJson = require("axios-get-json-response");
|
|
|
|
let manualAxios = axios.create(getJson.axiosConfiguration);
|
|
|
|
Promise.try(() => {
|
|
return manualAxios.get("http://cryto.net/invalid.json"); // {"hello": "world"
|
|
}).then((response) => {
|
|
let parsedJson = getJson.parse(response);
|
|
/* throws: ParsingFailed: Could not parse response body as JSON */
|
|
|
|
console.log(parsedJson);
|
|
});
|
|
```
|
|
|
|
The result for a non-existent URL:
|
|
|
|
```js
|
|
"use strict";
|
|
|
|
const axios = require("axios");
|
|
const Promise = require("bluebird");
|
|
const getJson = require("axios-get-json-response");
|
|
|
|
let manualAxios = axios.create(getJson.axiosConfiguration);
|
|
|
|
Promise.try(() => {
|
|
return manualAxios.get("http://cryto.net/non-existent.json"); // URL does not exist
|
|
}).then((response) => {
|
|
let parsedJson = getJson.parse(response);
|
|
/* throws: BadResponseCode: Got an unexpected HTTP status code (404) */
|
|
|
|
console.log(parsedJson);
|
|
});
|
|
```
|
|
|
|
## API
|
|
|
|
### getJson.axiosConfiguration
|
|
|
|
Some preset configuration options, that disable response code checking and body parsing in Axios. Needed for this library to work. These options are fed directly into Axios; see the example.
|
|
|
|
### getJson.parse(response, [options])
|
|
|
|
Validates the status code and parses the response body. Returns the parsed JSON if successful, or throws either a `BadStatusCode` or `ParsingFailed` error depending on what went wrong (see below).
|
|
|
|
- __response:__ The Axios response object to handle.
|
|
- __options:__ *Optional.*
|
|
- __validateStatus:__ *Optional.* A custom status code validation function, like in Axios. Defaults to the same as in Axios (all 2XX are considered valid). Expected to return `true` for a valid/expected status code, and `false` for an unexpected one.
|
|
|
|
### getJson.BadStatusCode
|
|
|
|
An error type that signifies that an unexpected status code was received.
|
|
|
|
Extra properties on this error object:
|
|
|
|
- __statusCode:__ The received status code.
|
|
|
|
### getJson.ParsingFailed
|
|
|
|
An error type that signifies that the response body could not be parsed as JSON.
|
|
|
|
## Changelog
|
|
|
|
### 1.0.1 (August 30, 2019)
|
|
|
|
- Removed erroneous `console.log`.
|
|
|
|
### 1.0.0 (August 30, 2019)
|
|
|
|
Initial release.
|