如何从两种不同的 fs 方法创建对象?
How to create object from two different fs methods?
我想用文件名和 fileStat 创建对象,所以在下面的代码中,我正在使用异步检查统计信息,对于文件名,我现在使用 readDir 一旦我有了值,我该如何创建对象数组?我正在尝试获取文件名及其创建日期并将其发送给客户端 objToReturn
。知道我怎样才能完成那个任务吗?
app.js
function readDirectory(callback) {
var dirPath = './logs/ditLogs';
//this will get you list of all files. in directory
var files = fs.readdirSync(dirPath);
var objToReturn = [{
fileName: '',
fileStat: ''
}];
//then using async do like this
async.eachSeries(files, function(file, callback) {
var filePath = path.join(dirPath, file);
fs.stat(filePath, function(err, stats) {
objToReturn.fileStat = stats;
//write stats data into objToReturn
fs.readdir(path, function(err, items) {
objToReturn.filename = items;
});
callback();
});
}, function(err) {
//final callback when all files completed here send objToReturn to client
callback(objToReturn);
});
你可以试试这个:
function readDirectory(callback) {
var dirPath = './logs/ditLogs';
//this will get you list of all files. in directory
var files = fs.readdirSync(dirPath);
var objToReturn = [];
//then using async do like this
async.eachSeries(files, function(file, callback) {
var filePath = path.join(dirPath, file);
fs.stat(filePath, function(err, stats) {
objToReturn.fileStat = stats;
//write stats data into objToReturn
fs.readdir(path, function(err, items) {
objToReturn.filename = items;
objToReturn.push({
fileName: items,
fileStat: stats
})
});
callback();
});
}, function(err) {
//final callback when all files completed here send objToReturn to client
callback(objToReturn);
});
}
希望这能奏效。
好的,我想我明白你想在这里做什么。您想要读取给定目录中的所有文件路径,然后为每个文件收集信息,然后再将此信息返回给给定的回调。现在看来,您正在将这些道具添加到数组 objToReturn
,而不是添加到每个对象并将其推送到 objToReturn
。通过这种方式,您可以覆盖每个异步读取的属性。
您还使用了 fs.readdir(path, function(err, items) {
,我认为您的意思是指您之前声明的 filePath
。
试试这样的东西:
async.eachSeries(files, function(file, callback) {
var filePath = path.join(dirPath, file);
var fileInfo = {};
fs.stat(filePath, function(err, stats) {
fileInfo.fileStat = stats;
//write stats data into objToReturn
fs.readdir(filePath, function(err, items) {
fileInfo.filename = items;
});
objToReturn.push(fileInfo);
callback();
});
}, function(err) {
我想用文件名和 fileStat 创建对象,所以在下面的代码中,我正在使用异步检查统计信息,对于文件名,我现在使用 readDir 一旦我有了值,我该如何创建对象数组?我正在尝试获取文件名及其创建日期并将其发送给客户端 objToReturn
。知道我怎样才能完成那个任务吗?
app.js
function readDirectory(callback) {
var dirPath = './logs/ditLogs';
//this will get you list of all files. in directory
var files = fs.readdirSync(dirPath);
var objToReturn = [{
fileName: '',
fileStat: ''
}];
//then using async do like this
async.eachSeries(files, function(file, callback) {
var filePath = path.join(dirPath, file);
fs.stat(filePath, function(err, stats) {
objToReturn.fileStat = stats;
//write stats data into objToReturn
fs.readdir(path, function(err, items) {
objToReturn.filename = items;
});
callback();
});
}, function(err) {
//final callback when all files completed here send objToReturn to client
callback(objToReturn);
});
你可以试试这个:
function readDirectory(callback) {
var dirPath = './logs/ditLogs';
//this will get you list of all files. in directory
var files = fs.readdirSync(dirPath);
var objToReturn = [];
//then using async do like this
async.eachSeries(files, function(file, callback) {
var filePath = path.join(dirPath, file);
fs.stat(filePath, function(err, stats) {
objToReturn.fileStat = stats;
//write stats data into objToReturn
fs.readdir(path, function(err, items) {
objToReturn.filename = items;
objToReturn.push({
fileName: items,
fileStat: stats
})
});
callback();
});
}, function(err) {
//final callback when all files completed here send objToReturn to client
callback(objToReturn);
});
}
希望这能奏效。
好的,我想我明白你想在这里做什么。您想要读取给定目录中的所有文件路径,然后为每个文件收集信息,然后再将此信息返回给给定的回调。现在看来,您正在将这些道具添加到数组 objToReturn
,而不是添加到每个对象并将其推送到 objToReturn
。通过这种方式,您可以覆盖每个异步读取的属性。
您还使用了 fs.readdir(path, function(err, items) {
,我认为您的意思是指您之前声明的 filePath
。
试试这样的东西:
async.eachSeries(files, function(file, callback) {
var filePath = path.join(dirPath, file);
var fileInfo = {};
fs.stat(filePath, function(err, stats) {
fileInfo.fileStat = stats;
//write stats data into objToReturn
fs.readdir(filePath, function(err, items) {
fileInfo.filename = items;
});
objToReturn.push(fileInfo);
callback();
});
}, function(err) {