fetchu: universal http-client
Differences with fetch:
- automatically handle json body (
JSON.stringify
a body that is an objet literal, and add the right header) - throws on http error status
Files:
- fetchu-node.js: using
http
/https
modules for NodeJS, light drop-in replacement for node-fetch
- fetchu-browser.js: it wraps
window.fetch
import fetchu from 'https://unpkg.com/fetchu';
await fetchu('https://cors-anywhere.herokuapp.com/http://example.com').then(r => r.text())
await fetchu('https://httpbin.org/get?test=foo').then(r => r.json())
await fetchu('https://httpbin.org/post', {method: 'POST', body: {test: 'foo'}}).then(r => r.json())
const ac = new AbortController()
fetchu('https://httpbin.org/get?test=foo', { signal: ac.signal }).then(console.log, console.error)
delay(10).then(() => ac.abort())
NodeJS specificities (coming from http/https builtins):
const fetchu = require('fetchu');
await fetchu({ path: '/v1.37/containers/json', socketPath: '/var/run/docker.sock' }).then(r => r.json())
require('abortcontroller-polyfill/dist/abortcontroller-polyfill-only');
const ac = new AbortController()
fetchu('https://httpbin.org/get?test=foo', { signal: ac.signal }).then(console.log, console.error)
delay(10).then(() => ac.abort());
const signal = new EventEmitter();
fetchu('https://httpbin.org/get?test=foo', { signal }).then(console.log, console.error)
delay(10).then(() => signal.emit('abort'))