我的“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' ]
到目前为止一切都很好。
问题是为什么我无法导出此模块之外的"file"(例如在变量中)以在我的应用程序中使用它们?
最佳答案
您无法直接导出这些文件的原因是 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 。
关于javascript - Node.js 中的导出模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53025600/