Javascript 如何在nodejs中使用fs从多个目录获取文件名?

Javascript 如何在nodejs中使用fs从多个目录获取文件名?,javascript,arrays,node.js,fs,Javascript,Arrays,Node.js,Fs,一旦我有了进一步的代码实现,我想从所有目录中获取文件信息,但我被困在这里,并得到了粘贴在问题中的错误。知道下面代码中实现的错误是什么吗 cron.js var fs = require('fs'); var path = require('path'); var async = require('async'); var directories = ['./logs/dit', './logs/st','./logs/uat'] function cronJob() { directories.

一旦我有了进一步的代码实现,我想从所有目录中获取文件信息,但我被困在这里,并得到了粘贴在问题中的错误。知道下面代码中实现的错误是什么吗

cron.js

var fs = require('fs');
var path = require('path');
var async = require('async');
var directories = ['./logs/dit', './logs/st','./logs/uat']
function cronJob() {
directories.forEach(function(dir){
    var files = fs.readdir(dir);
    async.eachSeries(files, function(file,callback) {
            var filePath = path.join(dirPath, file);
            var fileInfo = {};
            fs.stat(filePath, function(err, stats) {
               if (err) {
                 console.info("File doesn't");
                } else {
                 fileInfo.fileDate = stats.birthtime;
                 fileInfo.filename = file;
                 console.log(fileInfo);
//                 compareDates(fileInfo,filePath);
//                 callback();
               }
            });
        });
})

}

cronJob();
错误

s\Ulog-0\Ulog\app\serverfiles\logs\dit'
错误(本机)
在Object.fs.readdirSync(fs.js:808:18)
位于C:\Users\WebstormProjects\Ulog-0\Ulog\app\serverfiles\cronJob
20
at Array.forEach(本机)
在cronJob上(C:\Users\webstoreprojects\Ulog-0\Ulog\app\serverfile
obs.js:7:13)
反对。(C:\Users\\websprojects\Ulog-0\Ulog\app
是异步的,因此您需要等待它的回调来执行进一步的操作

很难知道到底是什么问题,所以我加入了日志语句

编辑

var fs = require('fs');
var path = require('path');
var async = require('async');
var directories = ['/../../logs/dit', '/../../logs/st', '/../../logs/uat'];

// loop through each directory
async.eachSeries(directories, function (dir, cb1) {
    var dir = __dirname + dir;
    console.log('reading', dir);
    // get files for the directory
    fs.readdir(dir, function (err, files) {
        if (err) return cb1(err);

        // loop through each file
        async.eachSeries(files, function (file, cb2) {
            var filePath = path.resolve(dir + '/' + file);
            // get info for the file
            fs.stat(filePath, function (err, stats) {
                if (err) return cb2(err);
                var fileInfo = { fileDate: stats.birthtime, filename: file };
                console.log('fileInfo', fileInfo);
                compareDates(fileInfo, filePath);
                cb2(null, fileInfo);
            });
        }, cb1);

    });
}, function (err, fileInfos) {
    if (err) {
        console.info('error', err);
        return;     
    }
    // when you're done reading all the files, do something...
});

您可能应该异步读取目录,这样就不会出现意外行为。获取此错误
C:\Users\sh529u\webstorprojects\Ulog-0\Ulog\app\serverfiles>node cronJobs.j reading./logs/dit dir error{[错误:eNONT:没有这样的文件或目录,scandir'C:\Users\sh5 WebStormProject\Ulog-0\Ulog\app\serverfiles\logs\dit']错误号:-4058,代码:'enoint',系统调用:'scandir',路径:'C:\\Users\\sh529u\\webstorprojects\\Ulog-0\\Ulog\\app\\serverfiles
logs
文件夹位于根级别,函数
app/serverfiles/cronJob.js
那么,你知道问题出在哪里了。它与
目录中的路径有关这让我很困惑。如果你能帮我解决这个问题,我会很感激你的编辑。我更改了一些逻辑。特别是,我更改了
目录
数组。确保路径相对于当前目录。如果
日志
位于根级别(假设与
应用程序
)的级别相同,那么您需要向上移动两个级别
/../../../
。请注意使用,以知道从何处开始。只需使用路径,最终您将获得它。
var fs = require('fs');
var path = require('path');
var async = require('async');
var directories = ['/../../logs/dit', '/../../logs/st', '/../../logs/uat'];

// loop through each directory
async.eachSeries(directories, function (dir, cb1) {
    var dir = __dirname + dir;
    console.log('reading', dir);
    // get files for the directory
    fs.readdir(dir, function (err, files) {
        if (err) return cb1(err);

        // loop through each file
        async.eachSeries(files, function (file, cb2) {
            var filePath = path.resolve(dir + '/' + file);
            // get info for the file
            fs.stat(filePath, function (err, stats) {
                if (err) return cb2(err);
                var fileInfo = { fileDate: stats.birthtime, filename: file };
                console.log('fileInfo', fileInfo);
                compareDates(fileInfo, filePath);
                cb2(null, fileInfo);
            });
        }, cb1);

    });
}, function (err, fileInfos) {
    if (err) {
        console.info('error', err);
        return;     
    }
    // when you're done reading all the files, do something...
});