bfet
A thin minimal wrapped around http|https NodeJS module for NodeJS and Browser.
Features
bfet supports sending GET
and POST
request method for both HTTP and HTTPS with an option to parse response as JSON or just simple string. Support Promise as return. It has internal caching system for GET request and you can enable or disable it.
Only target url that supports CORS will work on browser, otherwise it will return error accordingly. There should be no problem on NodeJS.
Install
Install it via npm install bfet
Usage
Promise Ready
bfet.get("https://targetdomain.com")
.then((result) => {
}, (e) => {
});
GET Request
bfet.get("https://targetdomain.com")
bfet.get("https://targetdomain.com?myanswer=1")
bfet.get("https://targetdomain.com", { myanswer: 1 })
bfet.get("https://targetdomain.com", { myanswer: 1 }, { json_parse: false })
bfet.get("https://targetdomain.com", { myanswer: 1 }, { username: "myusername", password: "mypassword" })
bfet.get("https://targetdomain.com",
{ myanswer: 1 },
{
username: "myusername",
password: "mypassword",
headers: {
'If-None-Match': '"d751713988987e9331980363e24189ce"'
}
})
POST Request
bfet.post("https://targetdomain.com", { myanswer: 1 })
bfet.post("https://targetdomain.com", { myanswer: 1 }, { json_parse: false })
bfet.post("https://targetdomain.com", { myanswer: 1 }, { username: "myusername", password: "mypassword" })
Caching
By default, it's enabled with internal caching for GET request.
It makes much more sense to cache only GET request as almost for POST request, it's just an acknowledge short response that user has successfully updated or created new resource. GET request is more likely to be dynamically changed, and larger in size.
bfet allows user to manually handle caching without relying on internal system although this would achieve the same result.
Manual Cache Handling
See the following code
bfet.global.options.enableCaching = false;
var etag;
var cachedItem;
bfet.get(url)
.then((r1) => {
cachedItem = r1.response;
etag = r1.responseHeaders.etag;
bfet.get(url, null, {
headers: {
'If-None-Match': etag
}
}).then((r2) => {
}, (e2) => {
});
}, (e1) => {
});
Concept is as follows
- User disable caching via
bfet.global.options.enableCaching
- Make a first request
- Save etag, or last-modified from response's headers, and also save response data
- Make a second request with additional header of either
If-None-Match
or If-Modified-Since
. - If cache hit, user should receive error result with code
304
. - Otherwise, observe error code for other circumstances.
Options
Individual Options
You have following options to set for your request.
json_parse
- Boolean
- Default is true
, you can set to false
to not parse the result you get.username
- String
- If target URL needs basic authorization, you can set username here.password
- String
- If target URl needs basic authorization, you can set password here.headers
- Object
- Headers as object for additional headers to be sent along with the request.
Global Options
bfet has global options which if configured will affect the whole system
bfet.global.options.enableCaching
- enable/disable internal caching, pretty much relates to HTTP 304 status code
Development
npm run build
- to create a bundle files in ./dist
directorynpm test
- to run tests for both NodeJS and browsernpm run http-and-watch
- to build, start local http-server and watch changes on file for live reloading
Misc
This project is based on basejit
License
This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License