我的“ getpics.js”文件中包含以下代码:
var path = require('path');
var fs = require('fs');
const directoryPath = './public/img/slider'
exports.fileOnDisk = function(){
fs.readdir(directoryPath, function (err, files) {
//handling error
if (err) {
return console.log('Unable to scan directory: ' + err);
};
console.log(files);
return files;
});
}
return module.exports;
这是我对模块的mail.js调用:
var getpics = require('./public/js/slider/getpics.js');
getpics.fileOnDisk();
这是控制台上的打印输出:
['next.png','next_hover.png','prev.png','prev_hover.png',
'slide1.jpg','slide2.jpg','slide3.jpg','slide4.jpg',
'slide5.jpg']
到目前为止一切都很好。
问题是为什么我不能在模块之外导出“文件”(例如在变量中)以在应用程序中使用它们?
答案 0 :(得分:1)
无法直接导出这些文件的原因是由于NodeJS的异步特性,特别是由于文件系统调用fs.readdir
。由于该函数调用以异步方式处理,因此代码执行将继续进行,并且您将无法访问该函数的任何结果以导出该函数。您可以在about section of NodeJS中详细了解它。
但是,NodeJS文件系统API确实提供了同步方法。具体针对您的情况fs.readdirSync。在您的代码中使用该代码,您最终会得到类似的东西:
var path = require('path');
var fs = require('fs');
const directoryPath = './public/img/slider'
exports.fileOnDisk = fs.readdirSync(directoryPath, {encoding: 'utf8'})
然后您可以导入该模块并直接从fileOnDisk
访问目录数组。
请注意,因为此代码将为blocking 。