Node.js中的模块接口module.exports浅析
在写node.js代码时,我们经常需要自己写模块(module)。同时还需要在模块最后写好模块接口,声明这个模块对外暴露什么内容。实际上,node.js的模块接口有多种不同写法。这里作者对此做了个简单的总结。
返回一个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();返回一个构造函数,也就是一个类
如下是一个简单的示例。
// 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");返回一个普通函数
如下是一个简单的示例
// func.js
var func = function() {
console.log("this is a testing function");
}; module.exports = func;调用方法为
var func = require("./func");
func();返回一个对象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浅析的更多相关文章
- Node.js中的模块接口module.exports
在写node.js代码时,我们经常需要自己写模块(module).同时还需要在模块最后写好模块接口,声明这个模块对外暴露什么内容.实际上,node.js的模块接口有多种不同写法.在此做了个简单的总结. ...
- node.js中express模块创建服务器和http模块客户端发请求
首先下载express模块,命令行输入 npm install express 1.node.js中express模块创建服务端 在js代码同文件位置新建一个文件夹(www_root),里面存放网页文 ...
- node.js中ws模块创建服务端和客户端,网页WebSocket客户端
首先下载websocket模块,命令行输入 npm install ws 1.node.js中ws模块创建服务端 // 加载node上websocket模块 ws; var ws = require( ...
- node.js中net模块创建服务器和客户端(TCP)
node.js中net模块创建服务器和客户端 1.node.js中net模块创建服务器(net.createServer) // 将net模块 引入进来 var net = require(" ...
- 在 Node.js 中引入模块:你所需要知道的一切都在这里
本文作者:Jacob Beltran 编译:胡子大哈 翻译原文:http://huziketang.com/blog/posts/detail?postId=58eaf471a58c240ae35bb ...
- Web 前端模块出现的原因,以及 Node.js 中的模块
模块出现原因 简单概述 随着 Web 2.0 时代的到来,JavaScript 不再是以前的小脚本程序了,它在前端担任了更多的职责,也逐渐地被广泛运用在了更加复杂的应用开发的级别上. 但是 JavaS ...
- node.js中通过dgram数据报模块创建UDP服务器和客户端
node.js中 dgram 模块提供了udp数据包的socket实现,可以方便的创建udp服务器和客户端. 一.创建UDP服务器和客户端 服务端: const dgram = require('dg ...
- node.js中net网络模块TCP服务端与客户端的使用
node.js中net模块为我们提供了TCP服务器和客户端通信的各种接口. 一.创建服务器并监听端口 const net = require('net'); //创建一个tcp服务 //参数一表示创建 ...
- node.js中module模块的理解
node.js中使用CommonJS规范实现模块功能,一个单独的文件就是一个单独的模块.通过require方法实现模块间的依赖管理. 通过require加载模块,是同步操作. 加载流程如下: 1.找到 ...
随机推荐
- Jquery 的ajax里边不能识别$(this)
确实不能用,在ajax外面弄个变量$this= $(this),然后在里面用就行了 在jQuery使用ajax后$(this)失效,原因很简单,$(this)指向的是最近调用它的jquery对象,即$ ...
- ERR_CACHE_MISS 上一页提示确认重新提交表单
SITUATION: 设备搜索后,根据返回结果 list.php 进入特定设备的详细页面 one.php,但点击后退按钮(上一页)返回 list.php,会出现确认重新提交表单的错误页面 ERR_CA ...
- Redis基于eval的多字段原子增量计算
目录 目录 1 1. 前言 1 2. 优点 1 3. 方法一:使用struct 2 3.1. 设置初始值(覆盖原有的,如果存在) 2 3.2. 查询k1的值 2 3.3. 设置初始值(覆盖原有的,如果 ...
- 佛祖保佑,永不死机 - /etc/motd文件配置
/etc/motd (message of to day:每日信息) 一.执行命令: cat <<EOT >/etc/motd _oo0oo_ (| -_- |) \ = / ___ ...
- Python自动化开发 -进程、线程和协程(二)
本节内容 一.线程进程介绍 二. 线程 1.线程基本使用 (Threading) 2.线程锁(Lock.RLock) 3.信号量(Semaphore) 4.事件(event) 5.条件(Conditi ...
- asp.net 子应用程序/虚拟目录 session共享
最近遇到了一个问题,我做的asp.net mvc应用程序要作为一个子应用程序部署到几个站点中,需要在本应用程序中获取站点的session值. 已经使用了session state server,并设置 ...
- java解决共享资源竞争
由于多线程的实现,在运行一个程序的时候可能会有很多的线程在同时运行,但是线程的调度并不是可见的,所以不会知道一个线程什么时候在运行,比如说 你坐在桌子前手拿着叉子,正要去叉盘中的最后一片食物,当你的叉 ...
- 动态产生select option列表
在很久之前,Insus.NET刚学习前端时,有写过<动态创建一些常的html标签>http://www.cnblogs.com/insus/p/3741665.html 但其中没有实现动态 ...
- Fiddler工具使用介绍三
我们知道Fiddler是位于客户端和服务器之间的代理,它能够记录客户端和服务器之间的所有 HTTP请求,可以针对特定的HTTP请求,分析请求数据.设置断点.调试web应用.修改请求的数据,甚至可以修改 ...
- Android开发 - 获取系统输入法高度的正确姿势
问题与解决 在Android应用的开发中,有一些需求需要我们获取到输入法的高度,但是官方的API并没有提供类似的方法,所以我们需要自己来实现. 查阅了网上很多资料,试过以后都不理想. 比如有的方法通过 ...