文档章节

Node.js中的模块接口module.exports浅析

gwyy
 gwyy
发布于 2017/11/20 12:02
字数 569
阅读 6
收藏 0

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

 

    1. 返回一个JSON Object

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

       

      1 var exp = { 
      2   "version": "1.0.0", 
      3   "function1": null, 
      4   "module1": null,
      5 };
      6 module.exports = exp;

       

       

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

       

      1 // MATH.js
      2 var MATH = {
      3   "pi": 3.14,
      4   "e": 2.72,
      5 };
      6 
      7 module.exports = MATH;

       

       

      调用方式为
       

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

       

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

       

      1 // module_collection.js
      2 var module_collection = {
      3   "module1": require("./module1"),
      4   "module2": require("./module2"),
      5 };
      6 
      7 module.exports = module_collection;

       

      调用方式为

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

       

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

       

      1 // functions.js
       2 var func1 = function() {
       3   console.log("func1");
       4 };
       5 
       6 var func2 = function() {
       7   console.log("func2");
       8 };
       9 
      10 exports.function1 = func1;
      11 exports.function2 = func2;

       

      调用方式为

      1 var functions = require("./functions");
      2 functions.function1();
      3 functions.function2();

       

    2. 返回一个构造函数,也就是一个类

      如下是一个简单的示例。

       

      1 // CLASS.js
       2 var CLASS = function(args) {
       3   this.args = args;
       4 }
       5 
       6 CLASS.prototype.func = function() {
       7   console.log("CLASS.func");
       8   console.log(this.args);
       9 };
      10 
      11 module.exports = CLASS;

       

       

      调用方法为

      1 var CLASS = require("./CLASS")
      2 var c = new CLASS("arguments");

       

    3. 返回一个普通函数

      如下是一个简单的示例

       

      1 // func.js
      2 var func = function() {
      3   console.log("this is a testing function");
      4 };
      5 
      6 module.exports = func;

       

       

      调用方法为

      1 var func = require("./func");
      2 func();

       

    4. 返回一个对象object

      如下是一个简单的示例

       

      1 // CLASS.js
       2 var CLASS = function() {
       3   this.say_hello = "hello";
       4 };
       5 
       6 CLASS.prototype.func = function() {
       7   console.log("I say " + this.say_hello);
       8 };
       9 
      10 module.exports = new CLASS();

       

       

      调用方法为

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

       

单例模式

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

 

1 // MATH.js
2 var MATH = {
3   "pi": 3.14,
4   "e": 2.72,
5 };
6 
7 module.exports = MATH;

以及

1 // CLASS.js
 2 var CLASS = function() {
 3   this.say_hello = "hello";
 4 };
 5 
 6 CLASS.prototype.func = function() {
 7   console.log("I say " + this.say_hello);
 8 };
 9 
10 module.exports = new CLASS();

本文转载自:

上一篇: Python 基础知识
下一篇: Python 基础知识
gwyy
粉丝 1
博文 2
码字总数 1287
作品 0
闸北
程序员
私信 提问
Nodejs教程10:Nodejs的模块化

示例代码请访问我的GitHub: github.com/chencl1986/… Nodejs定义模块 Nodejs的模块化由于出现的较早,因此它遵循的是CommonJS规范,而非ES6的模块化。 在Nodejs的模块化中,最常用到的有m...

LeeChen
03/04
0
0
node.js中exports与module.exports的区别分析

前言 关于Node.js中的exports和module.exports,很多时候都比较容易让人混淆,弄不清楚两者间的区别。那么我们就从头开始理清这两者之间的关系。 来源 在开发Node.js应用的时候,很多模块都是...

fisher-zh
2018/10/18
0
0
ES6与CommonJS中的模块处理

ES6和CommonJS都有自己的一套处理模块化代码的措施,即JS文件之间的相互引用。 为了方便两种方式的测试,使用nodejs的环境进行测试 CommonJS的模块处理 使用require来引入其他模块的代码,使...

zsfblank
2018/06/12
0
0
Node.js常用模块Module的加载机制与使用

Node.js模块机制采用了Commonjs规范,弥补了当前JavaScript开发大型没有标准的缺陷,类似于Java中的类文件,Python中的import机制,NodeJs中可以通过module.exports、require来导出和引入一个...

五月君
04/08
0
0
第二章. node中的模块和require

一 什么是模块. JavaScript诞生初,它只不过是一个网页的小脚本而已,没有人会想到它会发展到现在能有大量的库,工具,组件变得如此复杂,慢慢地javascript发展中,人们发现javascript有个先天的缺...

赵祖辉
2015/08/13
0
0

没有更多内容

加载失败,请刷新页面

加载更多

FPGA 设备 USB Platform Cable USB

lsusbFuture Technology Devices International, Ltd FT232H Single HS USB-UART/FIFO IC

MtrS
今天
4
0
lua web快速开发指南(6) - Cache、DB介绍

"数据库"与"缓存"的基本概念 数据库与缓存是服务端开发人员的必学知识点. 数据库 "数据库"是一种信息记录、存取的虚拟标记地点的集合统称. 比如现实生活中, 我们经常会用到文件柜、书桌等等数...

水果糖的小铺子
今天
5
0
Oracle分页查询语句的写法

Oracle分页查询语句的写法 Oracle分页查询语句使我们最常用的语句之一,下面就为您介绍的Oracle分页查询语句的用法,Oracle分页查询语句基本上可以按本文给出的格式来进行套用。   Oracle分...

康师傅
昨天
5
0
java并发图谱

1527
昨天
2
0
Mybatis之拦截器Interceptor

使用mybatis时用PageHelper进行分页,用到了PageInterceptor,借此了解下mybatis的interceptor。Mybatis的版本是3.4.6,MybatisHelper的版本是5.1.3。 1、PageInterceptor 先上一段代码,如下...

克虏伯
昨天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部