准备工作:
1. 来到我们的工作目录$ cd ~/nodejs
2. 如果还没有工作目录,请按下面方式新增
$ cd ~ $ mkdir nodejs $ cd nodejs
目标:编写一个独立模块来打印目录下符合指定后缀的文件
下面开始实际操作:
1. 新建文件node06-module.js
$ vim node06-module.js
2. 使用require
方法引入fs
模块
var fs = require('fs');
3. 使用require
方法引入path
模块
var path = require('path');
4. 使用module.exports
将异步读取目录,并计算行数的函数导出
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);
});
};
保存退出。
与前例的函数不同的是,最后加了一个回调方法,当结果产生后,调用这个回调方法,将结果”传递”给调用者。
5. 新建文件node06.js
$ vim node06.js
6. 引入我们的模块
var mymodule = require('./node06-module.js');
7. 获取参数
var dir = process.argv[2];
var filter = process.argv[3];
8. 调用模块
mymodule(dir, filter, function (err, list) {
if (err){
return console.error('Error: ', err);
}
list.forEach(function (file) {
console.log(file);
});
});
本篇代码
文件:~/nodejs/node06-module.js
var fs = require('fs');
var 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);
});
};
文件:~/nodejs/node06.js
var mymodule = require('./node06-module.js');
var dir = process.argv[2];
var filter = process.argv[3];
mymodule(dir, filter, function (err, list) {
if (err){
return console.error('Error: ', err);
}
list.forEach(function (file) {
console.log(file);
});
});
参考资料:
Modules Node.js v0.12.7 Manual & Documentation
learnyounode - MAKE IT MODULAR