node-sync-fetch
v1.0.0
Published
Synchronous HTTP requests using the native fetch API interface
Downloads
108
Maintainers
Readme
fetchSync
Synchronous HTTP requests with the native fetch() API interface. Zero dependencies. Node.js 18+.
Uses execSync to spawn a child process that runs native fetch, then returns the result synchronously.
Installation
npm install node-sync-fetchUsage
const fetchSync = require("node-sync-fetch");
// or
const { fetchSync } = require("node-sync-fetch");GET
const res = fetchSync("https://api.example.com/users");
console.log(res.status); // 200
console.log(res.ok); // true
console.log(res.json()); // parsed JSON body
console.log(res.text()); // raw string bodyPOST with JSON
const res = fetchSync("https://api.example.com/users", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({ name: "Alice" }),
});
console.log(res.status); // 201Headers
const res = fetchSync("https://api.example.com/data", {
headers: { Authorization: "Bearer token123" },
});
console.log(res.headers.get("content-type"));Timeout
const res = fetchSync("https://api.example.com/slow", {
timeout: 5000, // ms — aborts if exceeded
});Response object
| Property / Method | Description |
| --------------------- | ------------------------------------ |
| status | HTTP status code |
| statusText | HTTP status text |
| ok | true if status is 200–299 |
| url | Final URL after redirects |
| redirected | true if the request was redirected |
| headers.get(name) | Get a response header value |
| headers.has(name) | Check if a header exists |
| headers.forEach(cb) | Iterate headers |
| text() | Return body as a UTF-8 string |
| json() | Parse and return body as JSON |
| arrayBuffer() | Return body as an ArrayBuffer |
| bytes() | Return body as a Uint8Array |
All response methods are synchronous. The body is pre-buffered, so they can be called multiple times.
Options
All standard fetch() options are supported (method, headers, body, redirect, credentials, cache, mode, etc.) plus these extensions:
| Option | Type | Default | Description |
| ----------- | -------- | ---------- | ---------------------------------- |
| timeout | number | — | Abort after N milliseconds |
| maxBuffer | number | 67108864 | Max response size in bytes (64 MB) |
Body types
The body option accepts: string, URLSearchParams, Buffer, ArrayBuffer, and typed arrays. FormData and ReadableStream are not supported.
Errors
Throws on network failures (connection refused, DNS failure, timeout). Non-2xx responses are returned normally — check res.ok or res.status.
try {
const res = fetchSync("https://api.example.com/data");
if (!res.ok) throw new Error(`HTTP ${res.status}`);
return res.json();
} catch (err) {
console.error(err.message);
}Limitations
signal(AbortSignal) is not supported — use thetimeoutoption insteadcredentials: 'include'has no effect (no browser cookie jar in the child process)- Response streaming is not available — the full body is buffered in memory
blob()is not implemented
License
MIT
