同步与异步 API
fs 模块的大多数 API 都有“同步”与“异步”两个版本:异步函数(如 fs.readFile)带回调,不阻塞主线程;同步函数(如 fs.readFileSync)立即返回结果,但会卡住整个进程。
服务器代码里应一律用异步版 —— 一个同步调用会阻塞事件循环,所有并发请求都排队等它。同步版只在 CLI 脚本、构建工具、启动时加载配置这类“单线程无并发”场景才推荐使用。
- 异步版 readFile/readFile/writeFile:回调第一个参数永远是 err(错误优先契约)
- 同步版 readFileSync/writeFileSync:简单直接,但会阻塞事件循环
- Node 10+ 的 fs.promises 提供 Promise 版,配合 async/await 最舒服
JS
const fs = require('fs'); // ❌ 同步:服务器里禁止这样写(脚本里无妨) // const txt = fs.readFileSync('./cfg.json', 'utf8'); // ✅ 回调风格:错误优先 fs.readFile('./cfg.json', 'utf8', (err, data) => { if (err) return console.error('读取失败:', err.message); console.log('读到', data.length, '字符'); }); // ✅✅ Promise 风格(推荐) const fsp = require('fs').promises; (async () => { try { const txt = await fsp.readFile('./cfg.json', 'utf8'); console.log('async/await 读到:', txt.slice(0, 20)); } catch (e) { console.error('出错:', e.message); } })();
本节要点服务器只用异步 fs;同步 fs 只留给脚本与启动配置;fs.promises + async/await 是现代写法。




