Node.js使用fs.mkdir创建多级目录失败、无法自动生成父级目录如何解决?
问题原因
- 原生
fs.mkdir默认不开启递归创建父目录配置,父级目录不存在时会直接抛出错误 - 回调函数内的
return仅作用于回调本身,外层逻辑无法接收这个返回值,所以无法正常返回成功提示
修复方案
回调写法(兼容原有逻辑)
import { mkdir } from 'fs'; import { join } from 'path'; // 注意原代码遗漏了join的导入,需补充 const targetPath = join(__dirname, '../folder_to_create_directory/', req.body.path); // 新增{ recursive: true }配置开启递归创建 mkdir(targetPath, { recursive: true }, (err) => { if (err) { // 错误返回逻辑写在回调内部,比如接口返回可写为res.send("error") console.log("error"); return; } // 成功返回逻辑写在回调内部,比如接口返回可写为res.send("success") console.log("success"); });
更推荐的async/await写法(逻辑更清晰,避免回调嵌套问题)
import { mkdir } from 'fs/promises'; import { join } from 'path'; // 以下逻辑需写在async函数内部 try { const targetPath = join(__dirname, '../folder_to_create_directory/', req.body.path); await mkdir(targetPath, { recursive: true }); // 可直接在这里返回成功结果 return "success"; } catch (err) { // 捕获错误返回失败结果 return "error"; }
注意事项
{ recursive: true }配置需要Node.js 10.12.0及以上版本支持,低于该版本需升级Node.js或者自行实现递归创建目录逻辑。
内容的提问来源于stack exchange,提问作者mevr
相关产品推荐
相关产品推荐

