Node.js 的模块
为了让Node.js的文件可以相互调用,Node.js提供了一个简单的模块系统。
模块是Node.js 应用程序的基本组成部分,文件和模块是一一对应的。
换言之,一个 Node.js 文件就是一个模块,这个文件可能是JavaScript 代码、JSON 或者编译过的C/C++ 扩展。
创建一个模块
创建一个 funcitons.js 文件 文件内容如下
/*
* 这是一个对 对象 操作的模块
*/
// 定义一个数组
var arr = new Object();
// 获取单个数据
function get(key){
return arr[key];
}
function getList(){
return arr;
}
function add(key, value){
return arr[key] = value;
}
function edit(key, value){
return arr[key] = value;
}
function del(key){
return delete arr[key];
}
function clear(){
arr = new Object();
}
function dump(){
data = getList();
console.log(data);
}
// 通过设置modul.exports对象
// 将这些方法绑定到 modul.exports对象
// 当导入这个文件的时候 就可以调用了
module.exports.get = get;
module.exports.getList = getList;
module.exports.add = add;
module.exports.edit = edit;
module.exports.del = del;
module.exports.clear = clear;
module.exports.dump = dump;
模块的使用
在同目录下 创建一个 code.js 内容如下
// 导入模块
var functions = require('./functions');
// 注意模块导入模块的是不加 “.js” 后缀的
// 模块名即 文件名
// 路径必须 填写 绝对路径 或者相对路径
// 即 /xxxx/xxx/文件名 或者 ./xxx/文件名
// 如果路径 是这样的 'functions' 这样是会报错的。
// 只有node.js 内部的模块 才可以这么引入 例如 http, fs 等
// 打印看看 functions 对象 都是啥。。。
// 看看对象有什么
console.log(functions);
// 打印的数据如下 全是我们刚才暴露的方法。。。。。
// chen@chen:~/study/2-1 module$ node 2-2\ code.js
// { get: [Function: add],
// getList: [Function: getList],
// add: [Function: add],
// edit: [Function: edit],
// del: [Function: del],
// clear: [Function: clear],
// dump: [Function: dump] }
// chen@chen:~/study/2-1 module$
//
// 使用模块
/*
所有刚刚在 functions 文件中暴露的都可以通 引入的对象操作
*/
// 添加
functions.add('11', 'aaa');
functions.add('22', 'bbb');
// 获取单个
var data = functions.get('11');
console.log(data);
// 获取列表
data = functions.getList();
console.log(data);
// 修改单个
functions.edit('11', 'ccc');
functions.dump();
// 删除单个
functions.del('11');
functions.dump();
// 清空全部
functions.clear();
functions.dump();
输出的效果如下
chen@chen:~/study/nodejs/module$ node code.js
// 这个是对象信息
{ get: [Function: get],
getList: [Function: getList],
add: [Function: add],
edit: [Function: edit],
del: [Function: del],
clear: [Function: clear],
dump: [Function: dump] }
// 下方是调用方法的输出结果
aaa
{ '11': 'aaa', '22': 'bbb' }
{ '11': 'ccc', '22': 'bbb' }
{ '22': 'bbb' }
{}
chen@chen:~/study/nodejs/module$
模块小结
- 最好一个模块 一个操作,但是不要太过耦合 和 单一
- 文件名即是 模块名
- 引入 模块的时候 注意路径 要么是绝对路径 要么是相对路径
- 只用引入 nodejs 自带模块 才可以 不带路径 直接模块名
- 模块内的方法 或者对象,如果需要被外部访问,需要通过设置 module.exports. 来绑定