Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/joelvoss/request-lit
Small Promise based HTTP client
https://github.com/joelvoss/request-lit
fetch http-client javascript nodejs promise
Last synced: 4 days ago
JSON representation
Small Promise based HTTP client
- Host: GitHub
- URL: https://github.com/joelvoss/request-lit
- Owner: joelvoss
- License: mit
- Created: 2021-06-02T20:09:30.000Z (over 3 years ago)
- Default Branch: main
- Last Pushed: 2024-06-07T19:53:06.000Z (5 months ago)
- Last Synced: 2024-11-01T03:04:21.072Z (15 days ago)
- Topics: fetch, http-client, javascript, nodejs, promise
- Language: TypeScript
- Homepage:
- Size: 1.58 MB
- Stars: 1
- Watchers: 3
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# request-lit
Small Promise based HTTP client using the browser's native [Fetch API][fetch],
which is [supported in all modern browsers](https://caniuse.com/#feat=fetch)
and polyfilled by most tools including Next.js or Create React App.## Install
```bash
$ npm install request-lit
```## Example
### GET request
```js
import { request } from 'request-lit';(async () => {
const res = await request.get('https://jsonplaceholder.typicode.com/todos/1');
const data = await res.json();console.log(data);
// => { userId: 1, id: 1, title: 'delectus aut autem', completed: false }
})();
```### POST request
```js
import { request } from 'request-lit';(async () => {
await request.post('https://jsonplaceholder.typicode.com/todos', {
json: { userId: 1, title: 'delectus aut autem', completed: false },
});
})();
```### Error handling
If the server responds with an error status code, the promise will be rejected
with a `ResponseError` instance. The `ResponseError` instance has a `response`
property that contains the response object.```js
import { request, ResponseError } from 'request-lit';(async () => {
try {
const res = await request.get(
'https://jsonplaceholder.typicode.com/todos/1',
);
const todo = await res.json();
} catch (err) {
if (err instanceof ResponseError) {
switch (err.response.status) {
case 400:
/* Handle */ break;
case 401:
/* Handle */ break;
case 404:
/* Handle */ break;
case 500:
/* Handle */ break;
default:
/* Handle */ break;
}
}throw new Error('Unknown fetch error');
}
})();
```## API
The API is similar to the native `fetch` API, with some minor differences.
Consult the native [fetch documentation](https://developer.mozilla.org/en-US/docs/Web/API/fetch)
for more information.The differences are:
- If you pass a `json` key in the `options` object, it will be stringified and
set as the request body. In addition the `Content-Type` header will be set to
`application/json`. See the [POST request example](#post-request) above.
- If you pass a `validateStatus` function in the `options` object, it will be
used to determine if the status code is considered valid.## Request Method Alias
This library also provides pre-bound method aliases:
- `request.get(resource, options?)`
- `request.post(resource, options?)`
- `request.put(resource, options?)`
- `request.patch(resource, options?)`
- `request.delete(resource, options?)`
- `request.options(resource, options?)`## Development
[1] Install dependencies
```bash
$ npm install
```[2] Validate setup
```bash
$ ./Taskfile.sh validate
```[3] Start development by running tests in watch-mode
```bash
$ ./Taskfile.sh test -w
```---
```
## License
[MIT](./LICENSE)
```