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

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

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

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

如何将内容写入该路径?

推荐答案

从 node 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就是一个 node .否则它会为您创建所有缺失的目录.

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

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

Node.js相关问答推荐

Typescript :泛型类又扩展了另一个泛型类

看起来这段代码try GET 请求发送的值变为空白

如何避免在 mongodb 聚合中查找重复结果?

(Mongoose) 删除 TTL 字段失败

使用restify时如何支持cors

Node.js、Cygwin 和 Socket.io 走进一家wine 吧……Node.js 抛出 ENOBUFS,所有人都死了

将 myproject/.npmrc 与注册表一起使用

在 Node.js 与 Cron 作业(job)中设置间隔?

添加git信息到create-react-app

在 express 中添加故意延迟

如何解决 Socket.io 404(未找到)错误?

Forever + Nodemon 一起运行

yarn 和 npm 的主要区别是什么?

Node.js:对于每个……不工作

如果未能及时完成,NodeJS Timeout a Promise

使用适用于 Node.js 的 AWS 开发工具包将二进制文件上传到 S3

io.emit 与 socket.emit

nodemon 监视目录以进行更改

接受 POST 请求的 Node.js 服务器

我可以在 CoffeeScript 中编写 npm 包吗?