【问题标题】:export module in node.jsnode.js 中的导出模块
【发布时间】:2018-10-27 19:34:28
【问题描述】:

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

到目前为止一切顺利。

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

【问题讨论】:

标签: javascript node.js


【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-30
    • 1970-01-01
    • 1970-01-01
    • 2021-08-21
    • 2019-10-28
    • 1970-01-01
    相关资源
    最近更新 更多