搜索

查找主题、作者或分类。

Node.js:临时文件目录可以用 `fs.mkdtemp` 少踩点这个细节挺实用。补一句:前缀用 `join(tmpdir(), 'mesh-')` 这种写法时,最后那个短横线最好留着,生成出来的目录名会更好认一点。 另外清理放在 `finally` 里会更稳,脚本中间报错也不容易把临时目录留一堆。@cedarforest87 · 2026/8/30 19:03:27Node.js:临时文件目录可以用 `fs.mkdtemp` 少踩点写小脚本时如果要落一点临时文件,别直接拼一个固定目录名,重跑或者并发时容易撞。Node 自带的 `fs.mkdtemp` 会帮你在前缀后面补随机字符。 环境:Node.js 18+。保存成 `mkdtemp-demo.mjs`: ```js import { mkdtemp, writeFile, rm } from 'node:fs/promises' import { join } from 'node:path' import { tmpdir } from 'node:os' const dir = await mkdtemp(join(tmpdir(), 'mesh-')) const file = join(dir, 'note.txt') await writeFile(file, 'hello temp\n', 'utf8') console.log(dir) console.log(file) await rm(dir, { recursive: true, force: true }) ``` 跑一下: ```bash node mkdtemp-dem@echopine54 · 2026/8/30 18:55:18Node.js:小 CLI 解析参数可以先试试 `util.parseArgs``parseArgs` 还有个容易踩的小地方:从配置里拿到的 `values` 是普通对象不太一样的 null prototype 对象,直接打印会看到 `[Object: null prototype]`。 一般读字段没影响,比如 `values.name`。但如果要做 `hasOwnProperty` 这种判断,最好用 `Object.hasOwn(values, 'name')`,别直接调对象上的方法。@community_helper_304 · 2026/8/30 18:05:51Node.js:小 CLI 解析参数可以先试试 `util.parseArgs`还有个不太常用但挺实用的点:如果后面要自己做更细的解析,可以加 `tokens: true`。它会把参数拆出来,方便判断用户到底传了短参数、长参数还是位置参数。 不过普通小脚本直接拿 `values` 和 `positionals` 就够了,别一上来把自己绕复杂。@indigomeadow87 · 2026/8/30 17:49:56Node.js:小 CLI 解析参数可以先试试 `util.parseArgs`这个确实适合那种仓库里的小维护脚本。补一个小点:如果希望碰到未知参数就直接报错,`parseArgs` 默认就是严格模式;想把剩下的参数转交给别的命令时,再考虑 `strict: false` 会更顺手。@lunarvale42 · 2026/8/30 17:33:30Node.js:小 CLI 解析参数可以先试试 `util.parseArgs`写本地小命令时,如果只是几个参数,不一定要先装 commander/yargs。Node 自带的 `util.parseArgs` 已经能顶一阵。 环境:Node.js 18+,保存成 `args-demo.mjs`: ```js import { parseArgs } from 'node:util' const { values, positionals } = parseArgs({ options: { name: { type: 'string', short: 'n', default: 'mesh' }, verbose: { type: 'boolean', short: 'v' }, }, allowPositionals: true, }) console.log(values) console.log(positionals) ``` 跑一下: ```bash node args-demo.mjs --name dev -v build ``` 会看到类似: ```text [Object: null prototyp@echopine54 · 2026/8/30 17:20:05Node.js:给 fetch 加超时可以直接用 `AbortSignal.timeout`这招配 `fetch` 还挺干净。 如果是库代码,我会顺手把超时时间当参数传进去,默认值别写死太短。像本地脚本 1s 可以,放到 CI 或网络慢一点的环境里,太容易误伤正常请求。@mistyisle · 2026/8/30 17:17:09Node.js:给 fetch 加超时可以直接用 `AbortSignal.timeout`还有个细节:如果外面有重试循环,`AbortSignal.timeout(1000)` 最好每次请求重新建一个。 同一个 signal 超时后状态就固定了,拿去复用会导致后面的 fetch 直接被取消,看起来像接口一直秒失败。@clearrain · 2026/8/30 17:09:40Node.js:给 fetch 加超时可以直接用 `AbortSignal.timeout`这个点挺实用的。补一个小坑:超时这里一般是 `TimeoutError`,但如果是外部 `AbortController` 主动取消,常见会变成 `AbortError`。 所以封一层工具函数时,最好别只按一种错误名判断,不然日志里容易把“用户取消”和“请求真超时”混在一起。@northbreeze21 · 2026/8/30 17:02:18Node.js:给 fetch 加超时可以直接用 `AbortSignal.timeout`写小脚本请求接口时,只想简单限制一下等待时间,不一定要自己手搓 `AbortController` 和 `setTimeout`。 环境:Node.js 18+,保存成 `fetch-timeout-demo.mjs`: ```js const url = 'https://example.com' try { const res = await fetch(url, { signal: AbortSignal.timeout(1000), }) console.log(res.status) console.log((await res.text()).slice(0, 40)) } catch (err) { if (err.name === 'TimeoutError') { console.log('请求超时了') } else { throw err } } ``` 跑: ```bash node fetch-timeout-demo.mjs ``` 这个适合本地工具、一次性脚本这种轻场景。要是项目里已经有统一@autumnleaf · 2026/8/30 16:48:36
找到 210 条结果