gpt4 book ai didi

javascript - 处理可选的 API 查询字符串参数

转载 作者:行者123 更新时间:2023-12-03 02:17:00 26 4
gpt4 key购买 nike

我正在 React 中使用 Github API,并有一个表单允许用户从 3 个不同类别搜索存储库:文本(如名称中包含该文本的任何存储库)、星号(如最小数量)星星)和许可证类型。

可以使用这 3 个类别的任意组合来完成搜索。

所以我有以下 api 获取函数:

const root = 'https://api.github.com/search/repositories?q='

export const githubSearch = (txt, starMin, license) => {
return fetch(`${root}${txt}+stars:>=${starMin || 0}`)
.then(res => {
if (res.ok) {
return res.json();
}
else {
Promise.reject('Network failure')
}
})
}

这对于文本和星号限定符来说效果很好,因为 starMin 可以设置为默认值 0,如果文本参数是空字符串,它会跳过它并转到星号限定符,但问题是也就是说,许可证限定符需要有“license:”前缀,因此,例如:

license:mit

当执行以下查询时,将许可证保留为空字符串会导致错误请求:

fetch(`${root}${txt}+stars:>=${starMin || 0}+license:${license}`)

处理此可选参数的首选方法是什么?我可以想出几种有条件地设置新变量的黑客方法,但这是主要的代码味道。

额外问题:截至目前,如果 txt 字符串为空,并且发生的查询应该只是针对星号最小值,则生成的 url 将类似于:

https://api.github.com/search/repositories?q=+stars:>=5

它有效,但根据文档,搜索星星的方式是这样的,没有=之后的+:

https://api.github.com/search/repositories?q=stars:>=5

这被认为是不好的做法吗?

最佳答案

你可以将它们放入一个数组中并通过+连接。如果没有值,则不要放入数组中。这样,您就不会因为不存在的值而获得额外的 +

const segments = []
if (txt) segments.push(`${txt}`)
if (license) segments.push(`license:${license}`)
segments.push(`stars:>=${starMin || 0}`)

fetch(`${root}${segments.join('+')}`)

关于javascript - 处理可选的 API 查询字符串参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49331598/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com