J86*_*J86 1 callback node.js node-modules
我试图在流行的LearnYouNode程序的帮助下自学Node .我正在练习6题为' Make it Modular '.基本上我必须创建一个模块,然后在我的主要需要它program.js并满足一些条件.
其中一个条件表明,如果出现错误,我必须调用回调函数,只传递错误对象并保留第二个参数null.
这是我目前的模块代码:
var fs = require('fs'); // require file stream module
var pathMod = require('path'); // require path module
var i = 0; // local variable
var fileName = []; // local array variable
module.exports = function (path, ext, callback) {
return {
process: function () {
fs.readdir(path, callback);
},
success: function (ext, files) {
for(i; i < files.length; i++) {
var currentFile = files[i];
var currentFileExt = pathMod.extname(currentFile);
if(ext) {
if(ext === currentFileExt) {
fileName.push(currentFile);
}
} else {
fileName.push(currentFile);
}
}
return fileName;
}
};
};
Run Code Online (Sandbox Code Playgroud)
这是我的主要程序代码:
var prsFiles = require('./fpmod'); // require custom module
var path = process.argv[2]; // first parameter
var ext = '.' + process.argv[3]; // second parameter
var filtered; // local variable
// call back function
function callback(err, files) {
if(!err) {
// console.log('ext is: ' + ext)
filtered = mod.success(ext, files);
for (var i = 0; i < filtered.length; i++) {
console.log(filtered[i]);
};
} else {
console.log(err);
return;
}
}
var mod = prsFiles(path, ext, callback);
mod.process();
Run Code Online (Sandbox Code Playgroud)
当我尝试通过LearnYouNode验证我的代码时,我的实现失败并显示以下消息:
在fs.readdir()发生错误后,您的附加模块文件未调用回调参数
但我认为我的计划确实如此!我错过了什么?
谢谢
learnyounode测试期望您的模块使用包含文件列表的数组或readdir方法可能返回的错误来调用回调.因此,代替'return filename',测试期望您调用回调.此外,测试似乎对语法非常严格,因为对我来说这个代码不起作用 - >
if(err) {
callback(true)
} else {...}
Run Code Online (Sandbox Code Playgroud)
但这有效 - >
if(err) callback(err);
else {...}
Run Code Online (Sandbox Code Playgroud)
在这里说的是最终为我工作的代码.
Module.js - >
module.exports = function(dir, ext, callback) {
var fs = require('fs');
var path = require('path');
fs.readdir(dir, function(err, data) {
if (err) callback(err);
else {
var files = [];
for (var i = 0; i < data.length; i++) {
if (path.extname(data[i]) == '.' + ext) {
files.push(data[i]);
};
};
callback(null,files);
}
})
}
Run Code Online (Sandbox Code Playgroud)
和Modular.js - >
var module = require('./module');
module(process.argv[2], process.argv[3], function(err, data) {
if (err) {
console.log('Error!')
} else {
for (var i = 0; i < data.length; i++) {
console.log(data[i]);
};
}
})
Run Code Online (Sandbox Code Playgroud)
您可能会发现另一件有用的事情 - https://github.com/frasertweedale/learnyounode-solutions
| 归档时间: |
|
| 查看次数: |
2342 次 |
| 最近记录: |