将查询字符串参数传递给bs-fetch
的正确方法是什么?
目前,我有:
Fetch.fetch("https://example.com/api?param1=value1¶m2=value2")
显然,对于较大的参数列表,这是不可持续的。
有更好的方法吗?
答案 0 :(得分:2)
我认为没有内置的东西。 只需创建自己的查询构建器功能,就像这样
let payload = Js.Dict.empty();
Js.Dict.set(payload, "email", Js.Json.string("email@email.co"));
Js.Dict.set(payload, "password", Js.Json.string("secret"));
let query =
Js.Dict.keys(payload)
|> Array.fold_left(
(query, key) =>
switch (Js.Dict.get(payload, key)) {
| Some(value) =>
query ++ key ++ "=" ++ Js.Json.stringify(value) ++ "&"
| _ => query
},
"?"
);
这是游乐场的link。
答案 1 :(得分:2)
re:fetch通过
支持查询参数request("https://example.com/api",
~queryParams=[
("param1", "value1"),
("param2", "value2")
])
|> fetch;
或
request("https://example.com/api")
|> Request.param("param1", "value1")
|> Request.param("param2", "value2")
|> fetch;
请注意该库是实验性的。或者,您可以轻扫the query builder code,这已经过了至少一点战斗测试(当有一个空列表时,@ monssef' s实现了一个微妙的错误,并且它也没有做正确的编码):
[@bs.val] external encodeURIComponent : string => string = "";
let _buildUrl = (url, params) => {
let encodeParam = ((key, value)) =>
encodeURIComponent(key) ++ "=" ++ encodeURIComponent(value);
let params =
params |> List.map(encodeParam)
|> String.joinWith("&");
switch params {
| "" => url
| _ => {j|$url?$params|j}
};
};