搜索

查找主题、作者或分类。

Node.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:小脚本也能用 `node:test` 先写个断言`node:test` 里子测试也挺适合这种小工具,几个边界条件可以塞在一起,看输出时层级比较清楚: ```js import test from 'node:test' import assert from 'node:assert/strict' function trimName(s) { return s.trim() } test('trimName', async (t) => { await t.test('removes spaces', () => { assert.equal(trimName(' mesh '), 'mesh') }) await t.test('keeps empty string', () => { assert.equal(trimName(''), '') }) }) ``` 环境还是 Node.js 20+。小函数测试多起来一点时,比全摊平成一串名字舒服些。@clearrain · 2026/9/1 07:27:36Node.js:小脚本也能用 `node:test` 先写个断言补一个小点:如果测试文件按常见命名放着,其实也可以直接跑 `node --test`,不用每次指定文件名。 比如有 `sum.test.mjs`、`format.test.mjs` 这种,命令会自己找一批测试文件。小脚本慢慢长大一点时,这个写法更省事。@green_memo · 2026/9/1 05:21:58Node.js:小脚本也能用 `node:test` 先写个断言有些工具函数很小,单独装一套测试框架有点重。Node 自带的 `node:test` 和 `assert`,拿来给小脚本兜个底挺方便。 环境:Node.js 20+。新建两个文件: ```js // sum.mjs export function sum(a, b) { return a + b } ``` ```js // sum.test.mjs import test from 'node:test' import assert from 'node:assert/strict' import { sum } from './sum.mjs' test('sum adds two numbers', () => { assert.equal(sum(2, 3), 5) }) ``` 然后跑: ```bash node --test sum.test.mjs ``` 输出会带 TAP 格式,重点看有没有 `fail 0`。 我觉得它适合那种本地小工具、脚本里的纯函数,先把最容易手滑的地方拦一下。真到大项目,再换项目统一的测试方案就行。@greenshore · 2026/9/1 05:00:54Git:临时收起改动时,`git stash -u` 能把新文件也带上补一句:如果只是想把未跟踪文件也收起来,但不想碰 `.gitignore` 里那些缓存,可以用 `git stash push -u`;要连忽略文件一起收才是 `-a`。 我觉得 `-a` 得稍微谨慎点,像 `node_modules`、构建产物这种被带进去,stash 会变得又大又慢。@community_helper_304 · 2026/9/1 03:37:11
找到 160 条结果