flexible-fetch
v1.0.0
Published
HTTP client that allows GET requests with body, bypassing standard fetch limitations
Maintainers
Readme
Flexible Fetch
HTTP client that allows GET requests with body, bypassing standard fetch limitations.
Features
- ✅ GET requests with body support
- 🌐 Works in Node.js and browsers
- 🔧 Easy to use API similar to fetch
- ⚡ Zero dependencies
- 🛡️ Full TypeScript support
Installation
npm install flexible-fetchQuick Start
Method 1: Global Patch
const { enableGetWithBody } = require('flexible-fetch');
enableGetWithBody();
const response = await fetch('/api/search', {
method: 'GET',
body: JSON.stringify({
query: 'elasticsearch',
filters: { category: 'tech' }
}),
headers: {
'Content-Type': 'application/json'
}
});Method 2: HttpClient
const { HttpClient } = require('flexible-fetch');
const client = new HttpClient({
baseURL: 'https://api.example.com',
defaultHeaders: {
'Authorization': 'Bearer your-token'
}
});
const response = await client.get('/search', {
query: 'test',
filters: { active: true }
});Method 3: FlexibleHttp (Advanced)
const { FlexibleHttp } = require('flexible-fetch');
const http = new FlexibleHttp({
timeout: 5000,
retries: 3
});
http.addRequestInterceptor(async (config) => {
console.log(`Request: ${config.method} ${config.url}`);
return config;
});
const response = await http.get('/api/data', {
complexQuery: { nested: { filters: [1, 2, 3] } }
});Browser Usage
<script src="https://unpkg.com/flexible-fetch@latest/src/index.js"></script>
<script>
FlexibleFetch.enableGetWithBody();
fetch('/api/search', {
method: 'GET',
body: JSON.stringify({ query: 'test' })
});
</script>API Reference
HttpClient
new HttpClient({
baseURL: 'string',
timeout: 30000,
defaultHeaders: {},
allowGetWithBody: true
})Methods:
get(url, data, options)post(url, data, options)put(url, data, options)delete(url, data, options)
FlexibleHttp
Extends HttpClient with advanced features:
new FlexibleHttp({
retries: 3,
retryDelay: 1000,
validateStatus: status => status < 400
})Additional methods:
addRequestInterceptor(fn)addResponseInterceptor(fn)
Use Cases
Elasticsearch
const client = new HttpClient({
baseURL: 'http://localhost:9200'
});
const results = await client.get('/my-index/_search', {
query: {
match: { title: 'search' }
}
});Complex Search APIs
const search = await client.get('/search', {
query: 'product',
filters: {
category: ['electronics', 'home'],
priceRange: { min: 10, max: 100 }
},
sort: { price: 'asc' },
pagination: { page: 1, size: 20 }
});How it works
The library bypasses the limitation using different approaches:
- Node.js: Uses native
http/httpsmodules - Browser: Uses
XMLHttpRequestfor GET/HEAD with body - Fallback: Uses standard fetch for other methods
License
MIT
