这种导出文件的方法是不是正确?
Posted
技术标签:
【中文标题】这种导出文件的方法是不是正确?【英文标题】:Is this method for exporting files is correct?这种导出文件的方法是否正确? 【发布时间】:2018-01-18 14:07:45 【问题描述】:你好你怎么看这种方式,导入我所有以Handler.js结尾的文件(目录),然后全部导出
Screen of the folder where the files are
index.js:
const join = require('path')
const readdirSync, readFileSync, lstatSync = require('fs')
const handlersPath = readdirSync(__dirname)
.filter(fileName => /Handler.(js)$/.test(fileName))
.filter(fileName => !lstatSync(fileName).isDirectory())
for (const handlerPath of handlersPath)
const handlerName = /^(.*?)\Handler.js/.exec(handlerPath)[1]
exports[handlerName] = require(join(__dirname, handlerPath))
【问题讨论】:
但是为什么呢?我的意思是,你真的懒得不一一要求,就在需要的时候?但无论如何,这个问题太笼统了。如果它不产生错误,那么是的,它是正确的......?它会产生想要的行为吗?如果不是,请解释。 不,我一点也不懒 使用sync
函数是一种反模式。它阻止所有异步功能。 nodejs.org/en/docs/guides/blocking-vs-non-blocking
index.js 文件是一次导入器,并且仅在启动时(服务器初始化)
@Adam yer,但在这个用例中,这似乎是正确的做法。
【参考方案1】:
const join = require('path')
const readdir, lstat = require('fs')
readdir(__dirname, (error, files) =>
if (error) throw error
for (const fileName of files)
if (!/Handler.(js)$/.test(fileName)) continue ;
lstat(fileName, (error, stats) =>
if (error) throw error
if (stats.isDirectory()) return ;
const handlerName = /^(.*?)\Handler.js/.exec(fileName)[1]
exports[handlerName] = require(join(__dirname, fileName))
)
)
像这样完全异步吗?
【讨论】:
最好是全部加载完毕再继续回调还是直接导入?以上是关于这种导出文件的方法是不是正确?的主要内容,如果未能解决你的问题,请参考以下文章