在写node.js代码时,我们经常需要自己写模块(module)。同时还需要在模块最后写好模块接口,声明这个模块对外暴露什么内容。实际上,node.js的模块接口有多种不同写法。这里作者对此做了个简单的总结。

    1. 返回一个JSON Object

      如下代码是一个简单的示例。

       var exp = {
      "version": "1.0.0",
      "function1": null,
      "module1": null,
      };
      module.exports = exp;

      这种方式可以用于返回一些全局共享的常量或者变量,例如

       // MATH.js
      var MATH = {
      "pi": 3.14,
      "e": 2.72,
      }; module.exports = MATH;

      调用方式为

       var MATH = require("./MATH")
      console.log(MATH.pi);

      这种方式还可以用于返回几个require的其他模块,可以实现一次require多个模块

       // module_collection.js
      var module_collection = {
      "module1": require("./module1"),
      "module2": require("./module2"),
      }; module.exports = module_collection;

      调用方式为

       var module_collection = require("./module_collection");
      var module1 = module_collection.module1;
      var module2 = module_collection.module2;
      // Do something with module1 and module2

      其实这种方式还有个变种,如下,通常可以返回几个函数

       // functions.js
      var func1 = function() {
      console.log("func1");
      }; var func2 = function() {
      console.log("func2");
      }; exports.function1 = func1;
      exports.function2 = func2;

      调用方式为

       var functions = require("./functions");
      functions.function1();
      functions.function2();
    2. 返回一个构造函数,也就是一个类

      如下是一个简单的示例。

       // CLASS.js
      var CLASS = function(args) {
      this.args = args;
      } CLASS.prototype.func = function() {
      console.log("CLASS.func");
      console.log(this.args);
      }; module.exports = CLASS;

      调用方法为

       var CLASS = require("./CLASS")
      var c = new CLASS("arguments");
    3. 返回一个普通函数

      如下是一个简单的示例

       // func.js
      var func = function() {
      console.log("this is a testing function");
      }; module.exports = func;

      调用方法为

       var func = require("./func");
      func();
    4. 返回一个对象object

      如下是一个简单的示例

       // CLASS.js
      var CLASS = function() {
      this.say_hello = "hello";
      }; CLASS.prototype.func = function() {
      console.log("I say " + this.say_hello);
      }; module.exports = new CLASS();

      调用方法为

       var obj = require("./CLASS");
      obj.func();

单例模式

有时候我们需要模块返回一个单例 singleton. 可以利用上面的方式1和方式4来实现。也就是如下两种形式

 // MATH.js
var MATH = {
"pi": 3.14,
"e": 2.72,
}; module.exports = MATH;

以及

 // CLASS.js
var CLASS = function() {
this.say_hello = "hello";
}; CLASS.prototype.func = function() {
console.log("I say " + this.say_hello);
}; module.exports = new CLASS();

最后,真的很喜欢JavaScript这个语言,很方便。而且node.js的出现极大的增强了这门语言的能力。看好它!

Node.js中的模块接口module.exports浅析的更多相关文章

  1. Node.js中的模块接口module.exports

    在写node.js代码时,我们经常需要自己写模块(module).同时还需要在模块最后写好模块接口,声明这个模块对外暴露什么内容.实际上,node.js的模块接口有多种不同写法.在此做了个简单的总结. ...

  2. node.js中express模块创建服务器和http模块客户端发请求

    首先下载express模块,命令行输入 npm install express 1.node.js中express模块创建服务端 在js代码同文件位置新建一个文件夹(www_root),里面存放网页文 ...

  3. node.js中ws模块创建服务端和客户端,网页WebSocket客户端

    首先下载websocket模块,命令行输入 npm install ws 1.node.js中ws模块创建服务端 // 加载node上websocket模块 ws; var ws = require( ...

  4. node.js中net模块创建服务器和客户端(TCP)

    node.js中net模块创建服务器和客户端 1.node.js中net模块创建服务器(net.createServer) // 将net模块 引入进来 var net = require(" ...

  5. 在 Node.js 中引入模块:你所需要知道的一切都在这里

    本文作者:Jacob Beltran 编译:胡子大哈 翻译原文:http://huziketang.com/blog/posts/detail?postId=58eaf471a58c240ae35bb ...

  6. Web 前端模块出现的原因,以及 Node.js 中的模块

    模块出现原因 简单概述 随着 Web 2.0 时代的到来,JavaScript 不再是以前的小脚本程序了,它在前端担任了更多的职责,也逐渐地被广泛运用在了更加复杂的应用开发的级别上. 但是 JavaS ...

  7. node.js中通过dgram数据报模块创建UDP服务器和客户端

    node.js中 dgram 模块提供了udp数据包的socket实现,可以方便的创建udp服务器和客户端. 一.创建UDP服务器和客户端 服务端: const dgram = require('dg ...

  8. node.js中net网络模块TCP服务端与客户端的使用

    node.js中net模块为我们提供了TCP服务器和客户端通信的各种接口. 一.创建服务器并监听端口 const net = require('net'); //创建一个tcp服务 //参数一表示创建 ...

  9. node.js中module模块的理解

    node.js中使用CommonJS规范实现模块功能,一个单独的文件就是一个单独的模块.通过require方法实现模块间的依赖管理. 通过require加载模块,是同步操作. 加载流程如下: 1.找到 ...

随机推荐

  1. RabbitMQ c#版实现(转)

    出处:https://www.cnblogs.com/hanfan/p/9842301.html 网上很多人已经总结的很好了,比如今天看到的这个.https://www.cnblogs.com/Lip ...

  2. java常用设计模式四:观察者模式

    1.定义 观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一主题对象.这个主题对象在状态发生变化时,会通知所有观察者对象,使它们能够自动更新自己.观察者模式又叫发布-订阅(Publis ...

  3. C++STL 预定义函数对象和函数适配器

    预定义函数对象和函数适配器 预定义函数对象基本概念:标准模板库STL提前定义了很多预定义函数对象,#include <functional> 必须包含. 1使用预定义函数对象: void ...

  4. 详细解读 :java.sql.SQLException: Connection is read-only. Queries leading to data modification are not allowed,Java报错之Connection is read-only.

    问题分析: 实际开发项目中,进行insert的时候,产生这个问题是Spring框架的一个安全权限保护方法,对于方法调用的事物保护,一般配置如下: <!-- 事务管理 属性 --> < ...

  5. UVa 1610 Party Games(思维)

    题意: 给出一系列字符串,构造出一个最短字符串(可以不在集合中)大于等于其中的一半,小于另一半. 析:首先找出中间的两个字符串,然后暴力找出最短的字符串,满足题意. 代码如下: #include &l ...

  6. js格式化文件大小, 输出成带单位的字符串工具

    /** * 格式化文件大小, 输出成带单位的字符串 * @method formatSize * @grammar formatSize( size ) => String * @grammar ...

  7. W-TinyLFU——设计一个现代的缓存

    缓存设计是个基础架构领域里的重要话题,本号之前也有谈论过相关话题,点击原文可以看之前的介绍. 近日,HighScalability网站刊登了一篇文章,由前Google工程师发明的W-TinyLFU—— ...

  8. android 数据库更新

    SQLiteOpenHelper封装       继承SQLiteOpenHelper类,在构造方法中分别需要传入Context,数据库名称,CursorFactory(一般传入null,为默认数据库 ...

  9. VS IDE 中Visual C++ 中的项目属性配置

    VS IDE 中Visual C++ 中的项目属性配置 一. Visual C++ 项目系统基于 MSBuild. 虽然可以直接在命令行上编辑 XML 项目文件和属性表,我们仍建议你使用 VS IDE ...

  10. python的打开_记录

    1. 2.7版本,安装了2.7,可以在命令符里面输入cmd,然后输入python,进入python的工作环境. 2. 3.6版本 ,anaconda版本,在F:\qhpython里边找到python. ...