当前位置:  开发笔记 > 编程语言 > 正文

Node.js创建模块

模块是Node.js应用程序的基本组成部分,文件和模块是一一对应的。换言之,一个Node.js文件就是一个模块,这个文件可能是JavaScript代码、JSON或者编译过的C/C++扩展。varhttprequire(& SyntaxHighlighter.all()

模块是 Node.js 应用程序的基本组成部分,文件和模块是一一对应的。换言之,一个Node.js 文件就是一个模块,这个文件可能是 JavaScript 代码、JSON 或者编译过的 C/C++ 扩展。 var http = require('http'),其中 http是 Node.js 的一个核心模块,其内部是用 C++ 实现的,外部用 JavaScript 封装。我们通过require 函数获取了这个模块,然后才能使用其中的对象。

1、创建模块

创建模块很简单,就像写一个单独的函数一样,不过模块创建完成后,需要在其它地方去调用它,才能发挥它的效果,一样的像函数一样。首先创建一个module.js用来创建模块:


[javascript]
var x,y; 
exports.setArgs=function(a,b){ 
    x=a; 
    y=b; 

exports.mult=function(){ 
    console.log(x+"和"+y+"的乘积是:"+x*y); 

var x,y;
exports.setArgs=function(a,b){
    x=a;
    y=b;
}
exports.mult=function(){
    console.log(x+"和"+y+"的乘积是:"+x*y);
}然后写一个getModule.js来调用这个模块的内容:


[javascript]
var module=require("./module"); 
module.setArgs(5,4); 
module.mult(); 

var module=require("./module");
module.setArgs(5,4);
module.mult();在websotrm中,右键运行getModule.js,控制台输出结果如图:


当然,这只是最简单的一个例子,纯粹是学习如何创建和调用模块。

 

2、覆盖exports

上面的代码演示了直接把函数封装到模块当作,接下来演示如何把一个对象封装到模块当中。修改module.js如下:


[html]
function calc(){ 
    var x,y; 
    this.setArgs=function(a,b){ 
        x=a; 
        y=b; 
        console.log("设置参数成功。"); 
    }; 
    this.mult=function(){ 
        console.log(x+"和"+y+"的乘积是:"+x*y); 
    }; 
    this.add=function(){ 
        console.log(x+"和"+y+"的和是:"+(x+y)); 
    }; 

exports.calculator=calc; 

function calc(){
    var x,y;
    this.setArgs=function(a,b){
        x=a;
        y=b;
        console.log("设置参数成功。");
    };
    this.mult=function(){
        console.log(x+"和"+y+"的乘积是:"+x*y);
    };
    this.add=function(){
        console.log(x+"和"+y+"的和是:"+(x+y));
    };
}
exports.calculator=calc;上面的代码把一个calc函数封装到模块里面,然后导出为calculator对象,可以通过实例化这个calculator对象来调用相关算法函数。修改getModule.js如下:


[javascript]
/获得calculator对象  
var module=require("./module").calculator; 
console.log(module); //看看是什么东西  
//实例化,如果不做这一步,想直接通过module.Func会出错  
var moduleEntity=new module(); 
//验证moduleEntity是否可以正常调用函数  
console.log(moduleEntity.setArgs); 
//验证通过,此方法可以使用  
moduleEntity.setArgs(4,2); 
moduleEntity.add(); 
moduleEntity.mult(); 

//获得calculator对象
var module=require("./module").calculator;
console.log(module); //看看是什么东西
//实例化,如果不做这一步,想直接通过module.Func会出错
var moduleEntity=new module();
//验证moduleEntity是否可以正常调用函数
console.log(moduleEntity.setArgs);
//验证通过,此方法可以使用
moduleEntity.setArgs(4,2);
moduleEntity.add();
moduleEntity.mult();

 

不过,这个写法也可以稍加改动,导出时代码改为:

[javascript]
module.exports = calc;//直接把calc导出到module 

module.exports = calc;//直接把calc导出到module调用方法修改成如下:


[javascript]
var Calculator=require("./module"); 
calculator=new Calculator(); 
calculator.setArgs(7,3); 
calculator.add(); 

var Calculator=require("./module");
calculator=new Calculator();
calculator.setArgs(7,3);
calculator.add();个人感觉二者都一样,就是稍微少了那么一点代码。
模块接口的唯一变化是使用 module.exports = calc代替了 exports.calculator=calc。在外部引用该模块时,其接口对象就是要输出的 calc对象本身,而不是原先的exports。事实上,exports 本身仅仅是一个普通的空对象,即 {},它专门用来声明接口,本质上是通过它为模块闭包的内部建立了一个有限的访问接口。因为它没有任何特殊的地方,所以可以用其他东西来代替,譬如我们上面例子中的calculator 对象。
注意:不可以通过对 exports 直接赋值代替对 module.exports 赋值。exports 实际上只是一个和 module.exports 指向同一个对象的变量,它本身会在模块执行结束后释放,但 module 不会,因此只能通过指定module.exports 来改变访问接口。

 

/*以上内容参考Node.js开发指南一书*/

/*以上所有代码都是通过webstorm来开发的*/

 

推荐阅读
爱唱歌的郭少文_
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有