成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Urlcat:JavaScript的URL構(gòu)建器庫

開發(fā) 前端
urlcat 是一個小型的 JavaScript 庫,它使構(gòu)建 URL 非常方便并防止常見錯誤。

urlcat 是一個小型的 JavaScript 庫,它使構(gòu)建 URL 非常方便并防止常見錯誤。

特性:

  • 友好的 API
  • 無依賴
  • 壓縮后0.8KB大小
  • 提供TypeScript類型

為什么用?在調(diào)用 HTTP API 時,通常需要在 URL 中添加動態(tài)參數(shù):

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
}

正如你所看到的,這個最小的例子已經(jīng)很難閱讀了。這也是不正確的:

  • 我忘記了 API_URL 常量末尾有一個斜杠,所以這導致了一個包含重復斜杠的 URL(https://api.example.com//users)
  • 嵌入的值需要使用 encodeURIComponent 進行轉(zhuǎn)義

我可以使用內(nèi)置的 URL 類來防止重復的斜杠和 URLSearchParams 來轉(zhuǎn)義查詢字符串。但我仍然需要手動轉(zhuǎn)義所有路徑參數(shù)。

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
}

這個庫會這樣處理:

  • 轉(zhuǎn)義所有參數(shù)
  • 將所有部分連接起來(它們之間總是正好有一個/ 和 ?)

如何使用?目前,該軟件包通過 npm 分發(fā)。(Zip 下載和 CDN 即將推出)。

npm install --save urlcat

在Node.js中使用

官方支持 Node 10 及更高版本。由于代碼在內(nèi)部使用 URL 和 URLSearchParams 類,它們在 v10 以下不可用,因此我們無法支持這些版本。

要構(gòu)建完整的 URL(最常見的用例):

const urlcat = require('urlcat').default;

要使用任何一個實用函數(shù):

const { query, subst, join } = require('urlcat');

要使用所有導出的函數(shù):

const { default: urlcat, query, subst, join } = require('urlcat');

在Typescript中使用

官方支持 TypeScript 2.1 及更高版本。

要構(gòu)建完整的 URL(最常見的用例):

import urlcat from 'urlcat';

要使用任何一個實用函數(shù):

import { query, subst, join } from 'urlcat';

要使用所有導出的函數(shù):

import urlcat, { query, subst, join } from 'urlcat';

在Deno中使用

import urlcat from 'https://deno.land/x/urlcat/src/index.ts';

console.log(urlcat('https://api.foo.com', ':name', { id: 25, name: 'knpwrs' }));

API

ParamMap:具有字符串鍵的對象

例如,{ firstParam: 1, 'second-param': 2 } 是一個有效的 ParamMap。

urlcat:構(gòu)建完整的 URL

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'

query:構(gòu)建查詢字符串

使用指定的鍵值對構(gòu)建查詢字符串。鍵和值被轉(zhuǎn)義,然后由 '&' 字符連接。

例如:


??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'??

subst:替換路徑參數(shù)

用模板字符串中的值替換參數(shù)。模板可能包含 0 個或多個參數(shù)占位符。占位符以冒號 (:) 開頭,后跟只能包含大寫或小寫字母的參數(shù)名稱。在模板中找到的任何占位符都將替換為 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'??

join:使用一個分隔符連接兩個字符串

僅使用一個分隔符連接兩個部分。如果分隔符出現(xiàn)在 part1 的末尾或 part2 的開頭,則將其刪除,然后使用分隔符連接兩個部分。

例如:

part1

separator

part2

result

'first'

','

'second'

'first,second'

'first,'

','

'second'


'first'

','

',second'


'first,'

','

',second'


Github庫地址:https://github.com/balazsbotond/urlcat



責任編輯:武曉燕 來源: 前端全棧開發(fā)者
相關推薦

2023-02-01 14:08:53

JavaScriptURL安全

2019-02-26 13:00:11

JavaScriptURL前端

2021-08-11 22:50:53

JavaScript編程開發(fā)

2025-04-23 08:20:00

JavaScriptURLAPI

2023-04-25 15:50:50

Flask框架Web

2022-06-10 10:24:02

JavaScriptCOVID-19前端

2014-07-18 09:59:17

移動webJavascript移動Web

2011-03-29 15:30:20

Zabbix服務器

2021-05-25 16:34:06

JavaScript前端

2009-08-31 16:39:32

ASP.NET表達式樹

2010-03-31 10:05:40

CentOS Samb

2010-08-05 13:40:06

NFS服務器

2017-07-07 14:41:13

機器學習神經(jīng)網(wǎng)絡JavaScript

2022-06-13 10:39:12

JavaScript

2014-07-21 10:56:16

web CMSJavascriptjQuery插件

2020-11-03 09:00:00

API微服務JavaScript框

2018-02-23 11:11:11

PythonUrllibURL

2023-03-27 13:00:13

Javascript前端

2024-12-02 14:28:17

JavaScriptWeb開發(fā)

2010-06-30 13:56:32

構(gòu)建FTP服務器
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 99久久精品一区二区毛片吞精 | 精品国产99| 亚洲免费一 | а_天堂中文最新版地址 | 爱操影视| 国产精品久久久久久一区二区三区 | 性国产丰满麻豆videosex | 亚洲精品在线免费观看视频 | 日韩精品一区二区三区中文在线 | 国产精品国产成人国产三级 | 久草在线高清 | 99热在线观看精品 | 一区二区三区视频播放 | 99久久99热这里只有精品 | 日韩不卡一区二区 | 国产亚洲网站 | 高清欧美性猛交xxxx黑人猛交 | 日韩精品一区二区三区视频播放 | 欧美片网站免费 | 精品久久久久久亚洲精品 | 欧美日本亚洲 | 99精品在线观看 | 欧美日韩网站 | 日韩欧美中文字幕在线视频 | 午夜精品一区二区三区在线视频 | 夜夜爽99久久国产综合精品女不卡 | 成人无遮挡毛片免费看 | 美女毛片免费看 | 97久久精品午夜一区二区 | 日韩欧美不卡 | 欧美精品一二区 | 欧美第一页 | 免费成人高清在线视频 | 最新免费黄色网址 | 国产一区二区在线视频 | 日韩视频一区在线观看 | 超碰在线影院 | 日本久久精品 | 日本视频免费 | 欧美理伦片在线播放 | 91视频一88av|