javascript - Node.js 中的导出模块

标签 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' ]

到目前为止一切都很好。

问题是为什么我无法导出此模块之外的"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/

相关文章:

javascript - Jquery Mobile 用户界面网格

javascript - 在JavaScript中将相似的对象组合在一起

javascript - 使用 Javascript v3 API 向 Google Map 添加多个点

javascript - 如何将 "transfer"变量传递到 Node Express 路由器中的 Promise 链?

javascript - 如何使用数据库回调函数重定向用户 - HAPI

javascript - 从指令内部访问插值

javascript - 删除和设置目录后,Wordpress 站点出现 JQuery 错误

javascript - 在 NodeJs 进程之间使用 npm 缓存

node.js - 如何将预处理器绑定(bind)到 babel-register,以便在 babel 启动之前修改文件

javascript - 隐藏文件扩展名时识别文件类型