Chained and declarative HTTP client based on the browser Fetch API
- ✔︎ Chained and declarative api methods
- ✔︎ Based on the browser Fetch API
- ✔︎ Form support
- ✔︎ Download support
The latest version of Chrome, Firefox, and Safari.
npm i http-chain
import http from 'http-chain'
(async () => {
const res = await http
.p('https://cnodejs.org/api/v1')
.p('topics')
.q('page', 2)
.q('tab', 'good')
.q('limit', 5)
.get()
console.log('res', res)
})()
- PATH
- QUERY
- HEADER
- FORM
- HTTP METHODS
-
CACHE
- cache(ttl: number)
- clearCache()
-
OTHER
- beforeSend(callback: func)
- enrichResponse()
- download(fileName?: string)
- options(options: object)
Add path segment to request url including non-encoded path segment.
Examples
http
.path('https://cnodejs.org')
.path('api')
.path('v1')
.path('topics')
.get()
you can also make one path with the slash:
http
.path('https://cnodejs.org/api/v1/topics')
.get()
Alias for path().
Examples
http
.p('https://cnodejs.org')
.p('api')
.p('v1')
.p('topics')
.get()
Add query parameter to request url.
Examples
http
.path('https://cnodejs.org/api/v1')
.path('topics')
.query('page', 2)
.query('tab', 'good')
.query('limit', 5)
.get()
Alias for query().
Examples
http
.p('https://cnodejs.org/api/v1')
.p('topics')
.q('page', 2)
.q('tab', 'good')
.q('limit', 5)
.get()
Accept object as params.
Examples
http
.p('https://cnodejs.org/api/v1')
.p('topics')
.queryAll({
'page': 2,
'tab': 'good',
'limit': 5
})
.get()
Add header to request.
Examples
http
.p('account')
.p('users')
.p(userId)
.p('state')
.header('Content-Type', 'text/plain')
.put('LOCKED');
You can also define custom header by this method:
.header('X-TenantId', companyId)
Convenience method for setting the "Authorization" header, same with:
.header('Authorization', value)
Examples
.auth('Bearer eyJhbGciOiJIUzI1NiIs')
Set the content type of the body.
Examples
.content('multipart/form-data')
Convenience method for sending data as plain text, same with:
.content('text/plain')
Convenience method for sending data as json, same with:
.content('application/json')
Set the Accept header.
Examples
.accept('text/csv')
Convenience method for getting plain text response, same with:
.accept('text/plain')
Convenience method for getting XML response, same with:
.accept('text/plain')
Append formData params and set the content-type header to multipart/form-data
automatically.
Examples
http
.path('flipper/v0/flip')
.path('order')
.append('quotation', file)
.accept('application/vnd.oasis.ubl+json')
.post();
Convert the javascript object to a FormData and set the content-type header to multipart/form-data
automatically.
Examples
const data = {
pony: true,
text: 'abc'
}
http
.path('...')
.formData(data)
.post()
Convert the input to an url encoded string and set the content-type header to application/x-www-form-urlencoded
automatically.
Examples
const input = {
pony: true,
tim: { isFat: false }
}
const alreadyEncodedForm = 'pony=true&tim=%7B%22isFat%22%3Afalse%7D'
http.path('...').formUrl(form).post()
http.path('...').formUrl(alreadyEncodedForm).post()
Send request.
supported methods: POST, GET, POST, PUT, DELETE, PATCH, etc.
Send GET request, same with:
.send('GET', null)
Send POST request, same with:
.send('POST', body)
Send PUT request, same with:
.send('PUT', body)
Send PATCH request, same with:
.send('PATCH', body)
Send HEAD request, same with:
.send('HEAD', null)
Send DELETE request, same with:
.send('DELETE', null)
Makes this request cache for ttl milliseconds.
Clear the request cache map.
Examples
import { clearCache } from 'http-chain'
clearCache()
Callback that gets invoked with string url before sending.
Note: It can only change headers and body of the request.
Return a promise for the response (including status code and headers), rather than for just the response data.
Examples
http
.path(url)
.enrichResponse()
.get()
File will be named by following priority:
- High: download(fileName).
- Medium: response headers 'Content-Disposition' filename.
- Low: string after the last slash of path url.
Examples
// file will be downloaded and named 'prop-types.js'
http
.p('https://cdn.bootcss.com/prop-types/15.6.1/prop-types.js')
.download()
// file will be downloaded and named 'types.js'
http
.p('https://cdn.bootcss.com/prop-types/15.6.1/prop-types.js')
.download('types.js')
// you can also download file by chained path style
http
.p('https://cdn.bootcss.com')
.p('prop-types')
.p('15.6.1')
.p('prop-types.js')
.download()
Set Fetch API options, this options
method will replace other options you defined.
Examples
http
.p('...')
.options({credentials: 'include'})
.post(body)
MIT © Kimi Gao