node.js中的导出模块

时间:2018-10-27 19:34:28

标签: javascript node.js

我的“ 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']

到目前为止一切都很好。

问题是为什么我不能在模块之外导出“文件”(例如在变量中)以在应用程序中使用它们?

1 个答案:

答案 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