带有参数的模块 NodeJS
Modules with Arguments NodeJS
我有两个文件,home.js和module.js在同一个目录中。我正在尝试做的是,当我调用从 module.js 导出的函数时,我正在尝试传递名为 directory 的变量。
它给了我这个错误:binding.readdir(pathModule._makeLong(path(, req(;类型错误:路径必须是字符串。
我想弄清楚的是,我已经从家里传递了目录变量 process.argv[2](包含路径.js因为我在模块中调用函数.js需要相同的参数(路径(。
首页.js
var fs = require('fs');
var path = require('path');
var module = require('./module.js');
var directory = process.argv[2];
var extensionRequired = process.argv[3];
function printList(err, data) {
if(err) return err;
list.forEach(function (file) {
if(path.extname(file) === '.' + extensionRequired) {
console.log(file);
}
});
}
module(directory, extensionRequired, printList);
模块.js
var fs = require('fs');
var path = require('path');
module.exports = function (directory, extensionRequired, callBack) {
fs.readdir(directory, function(err, list) {
if(err) return err;
callBack(err, list)
});
}
我认为你犯了一个错误,忘记重命名list
变量:
function printList(err, data) {
if(err) return err;
// Here list => data
data.forEach(function (file) {
if(path.extname(file) === '.' + extensionRequired) {
console.log(file);
}
});
}
在名为 printList
的回调方法中,将第二个参数设置为 data
。如果要再次访问第二个参数的值,则必须在代码中使用data
或将其重新分配给另一个变量。
然后,您的方法可能如下所示:
function printList(err, data) {
if (err) return err;
data.forEach(function (file) {
if(path.extname(file) === '.' + extensionRequired) {
console.log(file);
}
});
}
此外,我看到您的代码还有两个问题:
在
module.js
中,您需要参数extensionRequired
。如果你仔细观察,你会发现,它甚至没有在这种方法中使用。这不是一个真正的错误,但在我看来会被视为不优雅。而是将其作为附加参数传递给printList
(恕我直言,更多的是节点典型方式(,或者像您当前所做的那样将其用作全局范围变量。在
module.js
的module.exports
匿名函数中,您正在使用if (err) return err;
。我强烈建议你不要做这样的事情。因为这是一个异步方法,所以你不能真正返回一些东西,因为 return-语句实际上可能会在你调用此方法后执行。相反,将错误作为回调的第一个参数传递。如果没有错误,请改为传递null
,以便您可以轻松确定是否发生了意外情况。总是检查一下!
然后,您的module.js
可能如下所示:
var fs = require('fs');
var path = require('path');
module.exports = function (directory, callback) {
fs.readdir(directory, function(err, list) {
if (err)
// Error happened, pass it to the callback
callback(err);
else
// Everything ran smooth, send null as the error (no error)
// and the list as the second argument.
callback(null, list)
});
}
然后,应相应地更改您的home.js
:
var fs = require('fs');
var path = require('path');
var module = require('./module.js');
var directory = process.argv[2];
var extensionRequired = process.argv[3];
function printList(err, data) {
if (err) {
console.error("An error occurred:", err);
// Exit with an error-code of one to
// tell failure to the calling process and
// prevent printing the probably 'undefined' data-variable
process.exit(1);
}
data.forEach(function (file) {
if(path.extname(file) === '.' + extensionRequired) {
console.log(file);
}
});
}
// extensionRequired removed, as it is not needed
module(directory, printList);
- 导出模块 NodeJS 时出现问题
- 如何从NodeJS中的模块返回数组
- nodeJS中的uglify js“;找不到模块“”;
- 如何解压缩NodeJS请求's模块gzip响应体
- Nodejs模块函数返回未定义的,而不是异步的
- Nodejs模块文件和concat
- 将路由处理程序委托给NodeJS+Express中的其他模块
- NodeJS请求模块-http上的body.IncomingMessage
- NodeJS:一个全局EventEmitter或每个模块它'他自己的
- NodeJS 是否重用已经加载的模块并共享其值?
- 如何使用nodejs步行模块将目录遍历到第一级
- 将 NodeJS 模块范围变量作为对象访问
- 从导出的模块返回变量,并在另一个文件(NodeJS)中使用它
- 为什么“exports”在nodejs模块中引用与“this”相同的对象
- 对NodeJS模块开发的怀疑
- NodeJS Semaphore模块:它是如何工作的
- 全局安装的NodeJS npm模块不执行节点的主/bin JavaScript文件
- 如何在nodejs中模块化代码
- 带有参数的模块 NodeJS
- 使用请求模块nodejs下载文件时需要filename