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

返回一个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();

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

如下是一个简单的示例。

 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");

返回一个普通函数

如下是一个简单的示例

复制代码

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();

返回一个对象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();

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

(转)nodejs的更多相关文章

  1. NodeJs之OS

    OS Node.js提供了一些基本的底层操作系统的模块OS. API var os = require('os'); console.log('[arch] 操作系统CPU架构'+os.arch()) ...

  2. NodeJs之Path

    Path模块 NodeJs提供的Path模块,使得我们可以对文件路径进行简单的操作. API var path = require('path'); var path_str = '\\Users\\ ...

  3. NodeJs之调试

    关于调试 当我们只专注于前端的时候,我们习惯性F12,这会给我们带来安全与舒心的感觉. 但是当我们使用NodeJs来开发后台的时候,我想噩梦来了. 但是也别泰国担心,NodeJs的调试是很不方便!这是 ...

  4. NodeJs在Linux下使用的各种问题

    环境:ubuntu16.04 ubuntu中安装NodeJs 通过apt-get命令安装后发现只能使用nodejs,而没有node命令 如果想避免这种情况请看下面连接的这种安装方式: 拓展见:Linu ...

  5. NodeJs之child_process

    一.child_process child_process是NodeJs的重要模块.帮助我们创建多进程任务,更好的利用了计算机的多核性能. 当然也支持线程间的通信. 二.child_process的几 ...

  6. nodejs进阶(6)—连接MySQL数据库

    1. 建库连库 连接MySQL数据库需要安装支持 npm install mysql 我们需要提前安装按mysql sever端 建一个数据库mydb1 mysql> CREATE DATABA ...

  7. 图片访问实时处理的实现(nodejs和php)

    我在访问时光网.网易云音乐等网站时,发现将它们页面中的一些图片URL修改一下就可以得到不同尺寸的图片,于是思考了其实现方案,我的思路是:URL Rewrite + 实时处理 + 缓存,对用户请求的UR ...

  8. nodejs进阶(4)—读取图片到页面

    我们先实现从指定路径读取图片然后输出到页面的功能. 先准备一张图片imgs/dog.jpg. file.js里面继续添加readImg方法,在这里注意读写的时候都需要声明'binary'.(file. ...

  9. nodejs进阶(3)—路由处理

    1. url.parse(url)解析 该方法将一个URL字符串转换成对象并返回. url.parse(urlStr, [parseQueryString], [slashesDenoteHost]) ...

  10. 【原】nodejs全局安装和本地安装的区别

    来微信支付有2年多了,从2年前的互联网模式转变为O2O模式,主要的场景是跟线下的商户去打交道,不像以往的互联网模式,有产品经理提需求,我们帮忙去解决问题. 转型后是这样的,团队成员更多需要去寻找业务的 ...

随机推荐

  1. jdk配置到tomcat配置

    1.jdk配置 首先下载jdk 这里我下载的是 jdk1.8 (jdk1.8.0_181\) 然后,安装 我的安装路径 C:\Program Files\Java\jdk1.8.0_181\ 我选择默 ...

  2. VS2010-MFC(常用控件:滚动条控件Scroll Bar)

    转自:http://www.jizhuomi.com/software/191.html 滚动条控件简介 滚动条大家也很熟悉了,Windows窗口中很多都有滚动条.前面讲的列表框和组合框设置了相应属性 ...

  3. HttpURLConnection与HttpClient浅析AAAA

    . GET请求与POST请求 HTTP协议是现在Internet上使用得最多.最重要的协议了,越来越多的Java应用程序需要直接通过HTTP协议来访问网络资源. 在介绍HttpURLConnectio ...

  4. UASCO Cow Pedigrees /// oj10140

    题目大意: 输入n,m :二叉树 输出 n个点分为m层 的方案数: 每个点的分支要么是0要么是2 Sample Input 5 3 Sample Output 2 即 两个方案为          O ...

  5. NEO4J 图数据库使用APOC数据导入

       Neo4j 数据导入 一.安装与部署 直接在官网下载安装包安装,解压即可. 二.下载相应的jar包 apoc 包下载链接: https://github.com/neo4j-contrib/ne ...

  6. 简单搭建dubbo

    为什么要用dubbo? 当网站规模达到了一定的量级的时候,普通的MVC框架已经不能满足我们的需求,于是分布式的服务框架和流动式的架构就凸显出来了.     单一应用架构 当网站流量很小时,只需一个应用 ...

  7. 2019-8-31-dotnet-core-发布只带必要的依赖文件

    title author date CreateTime categories dotnet core 发布只带必要的依赖文件 lindexi 2019-08-31 16:55:58 +0800 20 ...

  8. 洛谷P3239 [HNOI2015]亚瑟王

    题目描述 小 K 不慎被 LL 邪教洗脑了,洗脑程度深到他甚至想要从亚瑟王邪教中脱坑.他决定,在脱坑之前,最后再来打一盘亚瑟王.既然是最后一战,就一定要打得漂亮.众所周知,亚瑟王是一个看脸的游戏,技能 ...

  9. Android开发 获取View的尺寸的2个方法

    前言 总所周知,在activity启动的onCreate或者其他生命周期里去获取View的尺寸是错误的,因为很有可能View并没有初始化测量绘制完成.你这个时候获取的宽或的高不出意外就是0.所以,我们 ...

  10. 提高Modelsim仿真速度的方法(1) -- force

    假如主驱动时钟频率很高,因为要一个周期输出,仿真时间过长,仿真速度慢是自然. 但是仿真中,并不是每个驱动周期都是必要的,这时可以使用force命令把想要的信号提前制造出来. 事实上,对于使用到PLL的 ...