<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
urlcat 是一個小型的 JavaScript 庫,它使構建 URL 非常方便並防止常見錯誤;
特性:
在呼叫 HTTP API 時,通常需要在 URL 中新增動態引數:
const API_URL = 'https://api.example.com/'; function getUserPosts(id, blogId, limit, offset) { const requestUrl = `${API_URL}/users/${id}/blogs/${blogId}/posts?limit=${limit}&offset=${offset}`; // send HTTP request }
正如你所看到的,這個最小的例子已經很難閱讀了。這也是不正確的:
URL(https://api.example.com//users)
encodeURIComponent
進行跳脫我可以使用內建的 URL 類來防止重複的斜槓和 URLSearchParams
來跳脫查詢字串。但我仍然需要手動跳脫所有路徑引數。
const API_URL = 'https://api.example.com/'; function getUserPosts(id, blogId, limit, offset) { const escapedId = encodeURIComponent(id); const escapedBlogId = encodeURIComponent(blogId); const path = `/users/${escapedId}/blogs/${escapedBlogId}`; const url = new URL(path, API_URL); url.search = new URLSearchParams({ limit, offset }); const requestUrl = url.href; // send HTTP request }
如此簡單的任務,卻又很難讀,寫也很乏味!這是這個小型庫可以幫助您的地方:
const API_URL = 'https://api.example.com/'; function getUserPosts(id, limit, offset) { const requestUrl = urlcat(API_URL, '/users/:id/posts', { id, limit, offset }); // send HTTP request }
這個庫會這樣處理:
目前,該軟體包通過 npm 分發。 (Zip 下載和 CDN 即將推出)。
npm install --save urlcat
官方支援 Node 10 及更高版本。由於程式碼在內部使用 URL 和 URLSearchParams 類,它們在 v10 以下不可用,因此我們無法支援這些版本。
要構建完整的 URL(最常見的用例):
const urlcat = require('urlcat').default;
要使用任何一個實用函數:
const { query, subst, join } = require('urlcat');
要使用所有匯出的函數:
const { default: urlcat, query, subst, join } = require('urlcat');
官方支援 TypeScript 2.1 及更高版本。
要構建完整的 URL(最常見的用例):
import urlcat from 'urlcat';
要使用任何一個實用函數:
import { query, subst, join } from 'urlcat';
要使用所有匯出的函數:
import urlcat, { query, subst, join } from 'urlcat';
import urlcat from 'https://deno.land/x/urlcat/src/index.ts'; console.log(urlcat('https://api.foo.com', ':name', { id: 25, name: 'knpwrs' }));
例如:{ firstParam: 1, 'second-param': 2 }
是一個有效的 ParamMap
。
function urlcat(baseUrl: string, pathTemplate: string, params: ParamMap): string function urlcat(baseUrl: string, pathTemplate: string): string function urlcat(baseTemplate: string, params: ParamMap): string
例如:
urlcat('https://api.example.com', '/users/:id/posts', { id: 123, limit: 10, offset: 120 })
→ 'https://api.example.com/users/123/posts?limit=10&offset=120'
urlcat('http://example.com/', '/posts/:title', { title: 'Letters & "Special" Characters' })
→ 'http://example.com/posts/Letters%20%26%20%22Special%22%20Characters'
urlcat('https://api.example.com', '/users')
→ 'https://api.example.com/users'
urlcat('https://api.example.com/', '/users')
→ 'https://api.example.com/users'
urlcat('http://example.com/', '/users/:userId/posts/:postId/comments', { userId: 123, postId: 987, authorId: 456, limit: 10, offset: 120 })
→ 'http://example.com/users/123/posts/987/comments?authorId=456&limit=10&offset=120'
使用指定的鍵值對構建查詢字串。鍵和值被跳脫,然後由 '&' 字元連線。
例如:
params | result |
---|---|
{} | '' |
{ query: 'some text' } | 'query=some%20text' |
{ id: 42, 'comment-id': 86 } | 'id=42&comment-id=86' |
{ id: 42, 'a name': 'a value' } | 'id=42&a%20name=a%20value' |
用模板字串中的值替換引數。模板可能包含 0 個或多個引數預留位置。預留位置以冒號 (:) 開頭,後跟只能包含大寫或小寫字母的引數名稱。在模板中找到的任何預留位置都將替換為 params 中相應鍵下的值。
例如:
template | params | result |
---|---|---|
':id' | { id: 42 } | '42' |
'/users/:id' | { id: 42 } | '/users/42' |
'/users/:id/comments/:commentId' | { id: 42, commentId: 86 } | '/users/42/comments/86' |
'/users/:id' | { id: 42, foo: 'bar' } | '/users/42' |
僅使用一個分隔符連線兩個部分。如果分隔符出現在 part1 的末尾或 part2 的開頭,則將其刪除,然後使用分隔符連線兩個部分。
例如:
part1 | separator | part2 | result |
---|---|---|---|
'first' | ',' | 'second' | 'first,second' |
'first,' | ',' | 'second' | |
'first' | ',' | ',second' | |
'first,' | ',' | ',second' |
到此這篇關於JavaScript庫urlcat 之URL構建器庫的文章就介紹到這了,更多相關JavaScript URL構建器庫內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45