我将使用一个函数创建一个新的单独模块,该函数包含一个在主文件中调用的回调。
我的程序应使用 3个参数:首先是文件目录,然后是文件扩展名,最后是应通过文件扩展名过滤目录的回调函数。
这是我的module.js文件
var fs = require('fs')
module.exports = function (directory, fileExtension, callbackfun) {
fs.readdir(directory, callbackfun);
}
然后在主文件中导入模块,然后使用函数。
modulejs(process.argv[2], process.argv[3], callbackfun(callbackfn));
var callbackfn = function (err, data, fileExtension) {
console.log(fileExtension);
let filtred = data.filter(file => { if (file.indexOf("." + fileExtension) > -1) { console.log(file); } });
};
function callbackfun(callbackfunc1) {
callbackfunc1(err, data, fileExtension);
}
我实际上得到的错误是
ReferenceError: err is not defined
更新:我已经编辑了代码,现在出现了其他错误
UPDATE2 :我在Internet上获得了该解决方案,但不了解它的工作原理,如果有人逐步向我解释它,那将是很好的
module.jsconst fs = require('fs')
const path = require('path')
module.exports = function (dir, filterStr, callback) {
fs.readdir(dir, function (err, list) {
if (err) {
return callback(err)
}
list = list.filter(function (file) {
return path.extname(file) === '.' + filterStr
})
callback(null, list)
})
}
main.js
const filterFn = require('./module.js')
const dir = process.argv[2]
const filterStr = process.argv[3]
filterFn(dir, filterStr, function (err, list) {
console.log(list);
if (err) {
return console.error('There was an error:', err)
}
list.forEach(function (file) {
console.log(file)
})
})