72
47%
MIT
bs-axios
0.0.43
Axios bindings for Bucklescript

bs-axios npm version

Axios bindings for Bucklescript.

Installation

  1. Install bs-axios
$ yarn add bs-axios

or

$ npm install --save bs-axios
  1. Add "bs-axios" to "bs-dependencies" section of bsconfig.json

Examples

See usage examples in examples folder:

Simple request

  • RE
  • ML
Js.Promise.(
  Axios.get("/user?ID=12345")
  |> then_((response) => resolve(Js.log(response##data)))
  |> catch((error) => resolve(Js.log(error)))
);
let _ =
  let open Js.Promise in
    ((Axios.get "/user?ID=12345") |>
       (then_ (fun response  -> resolve (Js.log (## response data)))))
      |> (catch (fun error  -> resolve (Js.log error)))

Post requests

  • RE
  • ML
Js.Promise.(
  Axios.post("/user")
  |> then_((response) => resolve(Js.log(response##data)))
  |> catch((error) => resolve(Js.log(error)))
);
let _ =
  let open Js.Promise in
    ((Axios.post "/user") |>
       (then_ (fun response  -> resolve (Js.log (## response data)))))
      |> (catch (fun error  -> resolve (Js.log error)))
  • RE
  • ML
let user = {
  "username": "michel",
  "password": "12345678"
};

Js.Promise.(
  Axios.postData("/auth", {user})
  |> then_((response) => resolve(Js.log(response##data)))
  |> catch((error) => resolve(Js.log(error)))
);
let user = [%bs.obj { username = "michel"; password = "12345678" }]
let _ =
  let open Js.Promise in
    ((Axios.postData "/auth" user) |>
       (then_ (fun response  -> resolve (Js.log (## response data)))))
      |> (catch (fun error  -> resolve (Js.log error)))

Concurrency

  • RE
  • ML
Js.Promise.(
  Axios.all2((Axios.get("/users/1"), Axios.get("/users/1/friends")))
  |> then_(((user, friends)) => resolve(Js.log2(user##data, friends##data)))
  |> catch((error) => resolve(Js.log(error)))
);
let _ =
  let open Js.Promise in
    ((Axios.all2 ((Axios.get "/users/1"), (Axios.get "/users/1/friends"))) |>
       (then_
          (fun (user,friends)  ->
             resolve (Js.log2 (## user data) (## friends data)))))
      |> (catch (fun error  -> resolve (Js.log error)))

Creating an instance

You can create a new instance of axios with a custom config.

  • RE
  • ML
open Axios;

let inst = Instance.create(makeConfig(~baseURL="https://example.com", ()));
Js.Promise.(Instance.get(inst, "/") |> then_((resp) => resolve(Js.log(resp##data))));
open Axios
let inst = Instance.create (makeConfig ~baseURL:"https://example.com" ())
let _ =
  let open Js.Promise in
    (Instance.get inst "/") |>
      (then_ (fun resp  -> resolve (Js.log (## resp data))))

Error handling

  • RE
  • ML
external promiseErrorToJsObj : Js.Promise.error => Js.t('a) = "%identity";

Js.Promise.(
  Instance.get(inst, "/")
  |> then_(resp => resolve(Belt.Result.Ok(resp)))
  |> catch(error => {
       let error = error |> promiseErrorToJsObj;
       Js.log(error##response##status);
       resolve(Belt.Result.Error(error));
     })
);
external promiseErrorToJsObj : Js.Promise.error -> 'a Js.t = "%identity"
let _ =
  let open Js.Promise in
    ((Instance.get inst "/") |>
       (then_
          (fun resp  -> resolve ((Belt.Result.Ok (resp))[@explicit_arity ]))))
      |>
      (catch
         (fun error  ->
            let error = error |> promiseErrorToJsObj in
            Js.log (## (## error response) status);
            resolve ((Belt.Result.Error (error))[@explicit_arity ])))

Headers

  • RE
  • ML
let headers = Axios.Headers.fromObj({"Content-type": "application/json"});
Axios.getc("https://example.com", Axios.makeConfig(~headers, ()));

let headersDict =
  Js.Dict.(
    {
      let dict = empty();
      dict->set("Content-type", "application/json");
      dict;
    }
  );
let headers = Axios.Headers.fromDict(headersDict);
Axios.getc("https://example.com", Axios.makeConfig(~headers, ()));
967: syntax error, consider adding a `;' before

Node.js HTTP/HTTPS Agent

Providing custom Node.js HTTP Agent allows for configuring connection persistence and reuse. For secure connections, HTTPS Agent allows security related configuration to be provided.

  • RE
  • ML
let httpsAgent =
  Axios.Agent.Https.(config(~rejectUnauthorized=false, ()) |> create);

Axios.getc(
  "https://insecure-example.com",
  Axios.makeConfig(~httpsAgent, ()),
);
let httpsAgent =
  let open Axios.Agent.Https in
    (config ~rejectUnauthorized:false ()) |> create
let _ =
  Axios.getc "https://insecure-example.com" (Axios.makeConfig ~httpsAgent ())