我需要将文件写入以下路径:

fs.writeFile('/folder1/folder2/file.txt', 'content', function () {…});

但这条路可能并不存在.所以我得到了以下错误:

message=enoint,打开/folder1/folder2/file.txt

如何将内容写入该路径?

推荐答案

从节点v10开始,它内置于fs.mkdir函数中,我们可以将其与path.dirname结合使用:

var fs = require('fs');
var getDirName = require('path').dirname;

function writeFile(path, contents, cb) {
  fs.mkdir(getDirName(path), { recursive: true}, function (err) {
    if (err) return cb(err);

    fs.writeFile(path, contents, cb);
  });
}

对于旧版本,可以使用mkdirp:

var mkdirp = require('mkdirp');
var fs = require('fs');
var getDirName = require('path').dirname;

function writeFile(path, contents, cb) {
  mkdirp(getDirName(path), function (err) {
    if (err) return cb(err);
    
    fs.writeFile(path, contents, cb);
  });
}

如果整个路径已经存在,那么mkdirp就是一个节点.否则它会为您创建所有缺失的目录.

本模块满足您的需求:https://npmjs.org/package/writefile.在谷歌搜索"writefile mkdirp"时找到了它.这个模块返回一个promise ,而不是接受回调,所以一定要先阅读一些promise 的介绍.这可能会让你的事情变得复杂.

我给出的函数在任何情况下都有效.

Node.js相关问答推荐

GridFS 大文件下载使 Node.js 服务器崩溃. MongoServerError:排序超出了字节的内存限制

如何在 cypress 测试中进行计算

如何在拦截器中发送不同的请求?

自定义 Docker 容器 Github 操作无法在 /github/workspace 中找到 Node 脚本

Cypress net::ERR_EMPTY_RESPONSE 在真实服务器调用上

如何使动态私有IP地址静态?

Socket IOFlutter 未连接

当我们有“esnext”时,为什么我们需要“nodenext” typescript 编译器选项?

如何申请在NextJS上下载文件的许可?

Node.js 17.0.1 Gatsby 错误-“数字信封例程::不支持 ... ERR_OSSL_EVP_UNSUPPORTED”

适用于 Windows 7 的 NodeJS

React + Material-UI - 警告:props 类名不匹配

Typescript eslint - 缺少文件扩展名“ts”导入/扩展

在多个 .env 文件之间切换,例如 .env.development 和 node.js

`npm install` 后出现关于 python 语法错误的错误?

如何使用 nvm 更改节点版本

使用节点的内置调试器判断变量?

Node.js puppeteer - 如何设置导航超时?

如何包含节点二进制 npm 的路径

Node.js -Firebase 服务帐户私钥不会解析