返回

鱼塘由来:从fs模块认识文件系统的四种编码字符集编码

前端

我们从一个最基础的模块:文件读写,而今天学习的是fs模块。

使用 fs 模块有两种思路:一是自己手动来写一个函数,二是使用第三方包来解决。

一般情况下,我们主要是在手写模块上面比较熟悉,但如果经常需要使用一种功能,久而久之也会选择第三方包,因为第三方包的好处是很容易上手,而且实现的功能很健全。下面我们来使用第三方包来做。

首先,我们来安装这个包。

npm i mkdirp

安装之后,我们来写代码。

const fs = require('fs');
const mkdirp = require('mkdirp');

mkdirp('/tmp/upload', function(err) {
  if (err) console.error(err)
  else console.log('pow!')
});

然后,运行代码,即可看到终端上输出:

pow!

这一种方法的好处是比较容易实现,而且第三方包实现的功能也比较全面。但是,如果我们要手动写这个函数的话,就稍微麻烦一些。

首先,我们来写一个函数,用于判断服务器上面有没有 upload 目录,如果没有则创建,如果有则不改动。

function isExist(path, callback) {
  fs.exists(path, function(exists) {
    if (exists) {
      callback(null, true);
    } else {
      mkdirp(path, function(err) {
        if (err) {
          callback(err);
        } else {
          callback(null, false);
        }
      });
    }
  });
}

然后,我们来调用这个函数,看看效果。

isExist('/tmp/upload', function(err, exists) {
  if (err) {
    console.error(err);
  } else {
    if (exists) {
      console.log('目录已经存在');
    } else {
      console.log('目录不存在,已经创建');
    }
  }
});

运行代码,即可看到终端上输出:

目录不存在,已经创建

这种方法虽然比较麻烦,但是可以自己控制函数的实现细节,而且可以根据自己的需求来定制函数的功能。

在本文中,我们学习了如何使用 fs 模块来创建和修改文件,以及如何使用 async 和 await 语法来简化异步操作。我们还探讨了一些常见的编码问题,以及如何正确地处理它们。希望这篇文章对您有所帮助。