Nodejs readdir - 只查找文件

Ale*_*lls 6 readdir node.js

在阅读目录时,我目前有以下内容:

  fs.readdir(tests, (err, items) => {

      if(err){
        return cb(err);
      }

      const cmd = items.filter(v => fs.lstatSync(tests + '/' + v).isFile());

      k.stdin.end(`${cmd}`);
  });
Run Code Online (Sandbox Code Playgroud)

首先,我需要在 fs.lstatSync 周围进行 try/catch,我不想添加它。但是有没有办法fs.readdir只用来查找文件呢?

就像是:

fs.readdir(tests, {type:'f'}, (err, items) => {});
Run Code Online (Sandbox Code Playgroud)

有人知道怎么做吗?

bur*_*ive 8

从节点 v10.10.0 开始,您可以添加withFileTypes作为选项参数以获取fs.Dirent而不是字符串。

// or readdir to get a promise
const subPaths = fs.readdirSync(YOUR_BASE_PATH, { 
  withFileTypes: true
});
// subPaths is fs.Dirent[] type
const directories = subPaths.filter((dirent) => dirent.isFile());
// directories is string[] type
Run Code Online (Sandbox Code Playgroud)

更多信息位于节点文档:


jak*_*est 1

不幸的是,fs.readdir没有选项指定您只查找文件,而不是文件夹/目录(根据文档)。过滤结果以fs.readdir剔除目录是最好的选择。

https://nodejs.org/dist/latest-v10.x/docs/api/fs.html#fs_fs_readdir_path_options_callback

可选options参数可以是指定编码的字符串,也可以是具有encoding指定用于传递给回调的文件名的字符编码的属性的对象。如果encoding设置为'buffer',则返回的文件名将作为对象传递Buffer