函数获取数组到回调函数,或者如何使用fs获取深层目录结构"/>
如何从getPhotos()函数获取数组到回调函数,或者如何使用fs获取深层目录结构
我正在尝试收集服务器上列出的图库文件夹和图像,但是很难获取照片数组以返回结果。有人可以帮助我了解我做错了什么,因为它不会发送回数据吗?
我的代码:
module.exports.getGalleryImages = function(req, res) {
console.log('Fetch gallery image names');
var gallerypath = './public/assets/gallery';
function done(err, results) {
if (err) {
res.status(500).json(err);
} else {
res.status(200).json(results);
}
}
getGalleryFolders(gallerypath, done);
};
var getGalleryFolders = function(gallerypath, callback) {
const galleryFolders = [];
fs.readdir(gallerypath, async (err, files) => {
if (err) {
console.log('error: ', err);
callback(err);
}
files.forEach(file => {
let folder = { year: null, photos: [] };
folder = { year: file, photos: [file.files] };
galleryFolders.push(folder);
});
console.log(galleryFolders);
callback(null, galleryFolders);
// getPhotos(galleryFolders, gallerypath, callback);
});
};
var getPhotos = function(galleryFolders, gallerypath, callback) {
const gallery = [...galleryFolders];
gallery.forEach(folder => {
let subfolder = `${gallerypath}/${folder.year}`;
fs.readdir(subfolder, (err, photos) => {
if (err) {
console.log('error: ', err);
callback(err);
}
folder.photos = photos;
console.log(
`Returning folder ${folder.year} photos`,
folder.photos.length
);
return folder;
// console.log(folder);
});
gallery.push(folder);
console.log('returning gallery', gallery);
return gallery;
});
console.log(gallery);
callback(null, gallery);
};
它将在getGalleryFolders()函数中获取正确的文件夹,并将它们传递给下一个函数getPhotos()。 photos数组是正确的,无论我移到什么位置或返回位置,它似乎都不想离开该函数。
我得到的结果是:
[{“ year”:“ 2004”,“相片”: [空值]},{“ year”:“ 2011”,“相片”: [空值]},{“ year”:“ 2012”,“相片”: [空值]},{“ year”:“ 2013”,“相片”: [空值]},{“ year”:“ 2014”,“相片”: [空值]}]
我想返回这样的内容:
回答如下:[{“ year”:“ 2004”,“相片”: [“ 1.jpg”,“ 3.jpg”,“ somatic.jpg”]},{“ year”:“ 2011”,“相片”: [“ blue.jpg”,“ green.jpg”,yellow.jpg“]},{“ year”:“ 2012”,“相片”: [“ a.jpg”,“ b.jpg”,“ c.jpg”]},{“ year”:“ 2013”,“相片”: [“ 2013.jpg”]},{“ year”:“ 2014”,“相片”: [“ 2014.jpg”]}]
fs.readdir
将为您获取目录中所有文件的名称。它不会为您提供文件。
在数组中创建对象时,您会看到此信息:
folder = { year: file, photos: [file.files] }
[属性'year'设置为字符串(2004、2011等),该字符串必须是该目录中文件的名称。这也是为什么您的照片数组始终为空的原因。存储在'file'变量中的字符串没有任何属性,因为它是字符串而不是对象。当您尝试访问file.files
时,该“文件”属性不存在。
要获取文件的内容,您需要使用readdir获取的所有文件名调用类似fs.readFile
的名称。
https://nodejs/api/fs.html#fs_fs_readfile_path_options_callback
更多推荐
如何从getPhotos()函数获取数组到回调函数,或者如何使用fs获取深层目录结构
发布评论