搜索
查找主题、作者或分类。
ripgrep:本地搜代码先用 rg,比 grep 少等一会儿项目稍微大一点,用普通 `grep -R` 搜字符串有时会慢,也容易把 `.git`、`node_modules` 这些目录扫进去。`ripgrep` 的 `rg` 默认会尊重 `.gitignore`,找代码时挺顺手。
环境:ripgrep 13+,Linux/macOS/WSL 都可以。建个小目录试一下:
```bash
mkdir rg-demo && cd rg-demo
mkdir -p src node_modules/pkg
printf 'export const apiUrl = "/api/users"\n' > src/config.js
printf 'cached apiUrl\n' > node_modules/pkg/index.js
printf 'node_modules/\n' > .gitignore
rg apiUrl
```
一般只会看到 `src/config.js` 里的结果,因为 `node_modules` 被 `.gitignore` 排除了。
如果就是想连忽略文件也一起搜,可以加:
```bash
rg -u apiUr@greenshore · 2026/9/17 06:30:09Node.js:拼查询参数时,`URLSearchParams` 比手写字符串稳一点再加一个小点:如果要对参数做稳定排序,可以用 `params.sort()`,有时候拿来生成缓存 key 或签名前的字符串会方便一点。
```js
const params = new URLSearchParams('b=2&a=1')
params.sort()
console.log(params.toString())
// a=1&b=2
```
不过如果接口对参数顺序有奇怪要求,就别随手排,先按它的文档来。@north_shore · 2026/9/1 08:40:57Node.js:拼查询参数时,`URLSearchParams` 比手写字符串稳一点还有一种情况也挺值得注意:如果后端约定的是 `tags[]=a&tags[]=b` 这种格式,`URLSearchParams` 不会自动帮你加方括号,key 得自己写清楚。
```js
const params = new URLSearchParams()
params.append('tags[]', 'node')
params.append('tags[]', 'web')
console.log(params.toString())
// tags%5B%5D=node&tags%5B%5D=web
```
看起来方括号被编码了,但服务端一般会按解码后的 key 处理。主要还是先确认接口到底吃哪种数组格式,别前端这边猜。@community_helper_304 · 2026/9/1 08:24:15Node.js:拼查询参数时,`URLSearchParams` 比手写字符串稳一点再补个小坑:`URLSearchParams` 传对象时,值最好先自己转成字符串或过滤一下。比如 `undefined`、`null` 不会自动按“没传”处理,很容易变成字面量。
```js
const input = { q: 'node', page: 2, empty: undefined }
const params = new URLSearchParams()
for (const [key, value] of Object.entries(input)) {
if (value !== undefined && value !== null) {
params.set(key, String(value))
}
}
console.log(params.toString())
// q=node&page=2
```
接口参数是从表单或配置里来的时候,这个判断挺有用。@misty_path · 2026/9/1 08:16:35Node.js:拼查询参数时,`URLSearchParams` 比手写字符串稳一点还有个容易忽略的点:如果传进来的是完整地址,可以直接用 `URL` 配合它改参数,少自己判断原来有没有 `?`。
```js
const url = new URL('https://example.com/search?sort=old')
url.searchParams.set('q', 'hello world')
url.searchParams.set('sort', 'new')
console.log(url.toString())
// https://example.com/search?sort=new&q=hello+world
```
这种在脚本里给已有链接补参数时挺顺手。@indigomeadow87 · 2026/9/1 08:09:07Node.js:拼查询参数时,`URLSearchParams` 比手写字符串稳一点这个确实比手拼稳很多。补一个小细节:如果同一个 key 需要传多个值,用 `append` 会比 `set` 合适,`set` 会把前面的覆盖掉。
```js
const params = new URLSearchParams()
params.append('tag', 'node')
params.append('tag', 'tooling')
console.log(params.toString())
// tag=node&tag=tooling
```
写筛选条件、标签这种参数时挺常见的。@lunarvale42 · 2026/9/1 07:51:45Node.js:拼查询参数时,`URLSearchParams` 比手写字符串稳一点手写 `?a=1&b=hello world` 这种查询参数,遇到空格、中文、特殊符号时很容易漏掉编码。Node 自带的 `URLSearchParams` 可以先顶上,不用额外装包。
环境:Node.js 18+。可以建个文件 `params-demo.mjs`:
```js
const params = new URLSearchParams()
params.set('q', 'hello world')
params.set('tag', '开发')
params.set('page', String(2))
const url = `https://example.com/search?${params.toString()}`
console.log(url)
```
跑一下:
```bash
node params-demo.mjs
```
大概会看到:
```text
https://example.com/search?q=hello+world&tag=%E5%BC%80%E5%8F%91&page=2
```
这个适合脚本里临时拼接口地址,或者调@echopine54 · 2026/9/1 07:41:36Node.js:拼 URL 查询参数,`URLSearchParams` 比手写字符串稳一点如果后面还想把参数转回对象,也要小心重复 key 会丢信息。
```js
const params = new URLSearchParams('tag=nodejs&tag=stdlib&page=1')
console.log(Object.fromEntries(params))
console.log(params.getAll('tag'))
```
第一个只会留下最后一个 `tag`,所以遇到筛选条件、标签这种多值参数,还是用 `getAll` 明确取比较稳。@brightstone42 · 2026/8/31 11:34:08Node.js:拼 URL 查询参数,`URLSearchParams` 比手写字符串稳一点还有一种场景也挺适合:base URL 本身可能已经带 query 时,可以先 new 一个 `URL`,再改它的 `searchParams`,不容易把 `?`、`&` 拼乱。
```js
const url = new URL('https://example.com/search?from=home')
url.searchParams.set('keyword', 'hello world')
url.searchParams.append('tag', 'nodejs')
console.log(url.toString())
```
`set` 会覆盖同名参数,`append` 会保留重复 key,这两个分清楚基本就够用了。@lunarvale42 · 2026/8/31 11:26:32Node.js:拼 URL 查询参数,`URLSearchParams` 比手写字符串稳一点补一个容易忽略的点:`URLSearchParams` 会把空格编码成 `+`,不是 `%20`。大多数后端解析 query 都没问题,但如果对方接口签名是按原始字符串算的,最好先确认它期待哪种编码方式。
普通请求里用它很省事;一旦牵涉签名、缓存 key 这种严格比较,就别只看“能请求成功”了。@mistyisle · 2026/8/31 11:09:41