如何返回目录文件? (JavaScript,Node.js)

时间:2018-09-03 00:20:29

标签: javascript node.js file directory

我想返回目录的文件。

我需要它来将路由传递给另一个功能。

换句话说,如何使用JavaScript / Node.js返回目录的文件?

const fs = require('fs');
const path = require('path');
const mdLinks = require('../index');
exports.extension = (route) => {

    return new Promise((resolve, reject) => {
        try {
            recursive(route);
        } catch (e) {
            reject(e);
        }
    });
}

const recursive = (route) => {
    const extMd = ".md";
    let extName = path.extname(route);
    let files = [];
    fs.stat(route, (err, stats) => {
        if (stats && stats.isDirectory()) {
            fs.readdir(route, (err, files) => {
                files.forEach(file => {
                    let reFile = path.join(route, file);
                    if (file !== '.git') {
                        recursive(reFile);
                    }
                });
            })
        }
        else if (stats.isFile() && (extMd == extName)) {
            files.push(route);
        }

    })

    return files;
}

1 个答案:

答案 0 :(得分:1)

有多个问题。

首先,您的函数是异步的,因此它不能仅返回Compose Reply值,因为您的函数在将任何内容添加到files数组之前很久就返回了(这是它为空的一个原因)。它必须在完成后调用回调或返回调用方可以使用的承诺。您必须在顶层和递归调用时都进行修复。

第二,您要在每个递归步骤中重新定义files,以便无法收集所有内容。您可以传递要添加的数组,也可以在更高级别定义files数组,每个人都引用同一个数组,也可以调用递归方式连接返回到当前数组的文件

第三,您尚未在任何异步文件I / O调用上实现任何错误处理。

这是我建议的解决所有这些问题的方法:

files