Node.js中fs.readdir读取GIF文件为何输出空数组?
问题原因及修复方案
1. 异步执行顺序错误
fs.readdir是异步IO操作,它的回调函数要等目录读取完成后才会执行,但你写的console.log(array)是在fs.readdir调用后立刻执行的——这时候回调还没运行,array根本没被填充,自然输出空数组。
2. 文件名匹配逻辑漏洞
- 正则
/gif/会匹配任何包含gif的文件名,比如abcgif.txt这种非gif后缀的文件也会被误选,不符合“只找.gif后缀文件”的需求。 file.search(pattern)>0的判断有问题:如果文件名是gif.gif,search返回0,这时候>0的条件会把它排除;要是文件名是test.gif,虽然能匹配,但逻辑完全是碰运气,不是正确的后缀匹配方式。
修复后的代码
方案1:用回调处理异步
const testFolder = '../assets'; const fs = require('fs'); fs.readdir(testFolder, (err, files) => { // 先处理错误,避免崩溃 if (err) { console.error('读取目录失败:', err); return; } // 筛选以.gif结尾的文件,用endsWith更直观 const gifFiles = files.filter(file => file.endsWith('.gif')); console.log(gifFiles); });
方案2:用async-await简化异步逻辑
const testFolder = '../assets'; const fs = require('fs'); async function getGifFiles() { try { const files = await fs.promises.readdir(testFolder); const gifFiles = files.filter(file => /\.gif$/.test(file)); console.log(gifFiles); } catch (err) { console.error('读取目录失败:', err); } } getGifFiles();
内容的提问来源于stack exchange,提问作者Lucifer
相关产品推荐
相关产品推荐

