玩转Node.js - 06. 使其模块化

准备工作:
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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值