在开发一个复杂的应用程序的时候,我们需要把各个功能拆分、封装到不同的文件,在需要的时候引用该文件。没人会写一个几万行代码的文件,这样在可读性、复用性和维护性上都很差,几乎所有的编程语言都有自己的模块组织方式,比如Java中的包、C#中的程序集等,node.js使用模块和包来组织,其机制实现参照了CommonJS标准,虽未完全遵守,但差距不大,使用起来非常简单。
模块在node.js中的概念很简单,看看如何创建一个我们自己的模块供开发复用。
在node.js中创建模块非常简单,一个文件就是一个模块,所以我们创建一个module_1.js文件就创建了一个模块
console.log("load moudle_1.js"); var name=''; function setName(n){ name=n; } function printName(){ console.log(name); } exports.setName=setName; exports.printName=printName;
问题是怎么使外部访问这个module,我们知道客户端的JavaScript使用script标签引入JavaScript文件就可以访问其内容了,但这样带了的弊端很多,最大的就是作用域相同,产生冲突问题,以至于前端大师们想出了立即执行函数等方式,利用闭包解决。node.js使用exports和require对象来解决对外提供接口和引用模块的问题。我们可以把模块中希望被外界访问的内容定义到exports对象中,例如
var m = require("./moudle_1.js"); m.setName("thd"); m.printName(); var m2 = require("./moudle_1.js"); m2.setName("thirdteendevil"); m2.printName(); m.printName();
我们可以把module_1.js中的exports看做是一个对象,在app_1.js中第一行require("./moudle_1.js");返回的就是moudle_1.js中的exports对象。(不晓得是不是真的这样啊,仅仅是个人猜测)
再看一种情况
moudle_2.js:
console.log(" load moudle_2.js "); var Student = function(name){ this.name = name; } Student.prototype = { getName : function(){ return this.name; }, setName : function(name){ this.name = name; } } exports.Student=Student;
app_2.js
var Student = require("./moudle_2.js").Student; var s1 = new Student("thd"); console.log(s1.getName()+"|||"); var s2 = new Student("thirdteendevil"); console.log(s2.getName()+"|||"); console.log(s1.getName()+"|||");
在moudle_2.js中,exports.Student指向了一个函数(类),在app_2.js中第一行代码require("./moudle_2.js")按照上例的理解,返回的是moudle_2.js中的exports,但moudle_2.js中最后定义了exports.Student=Student,
所以在app_2.js中如果要使用exports.Student属性则需要写成var Student = require("./moudle_2.js").Student;
综上所述,将require("./xxx.js")理解为 xxx.js中的exports对象就可以了。
初学nodejs以上内容均为个人理解,如有不当之处,还望高手指点。
注:模块的英文是module以上的文件因个人英语水平全部写成了moudle,自行修改吧。。。
相关推荐
cos-nodejs-sdk-v5腾讯云 COS Nodejs SDK()installnpm i cos-nodejs-sdk-v5 --savedemo// 引入模块var COS = require('cos-nodejs-sdk-v5');// 创建实例var cos = new COS({ SecretId: '...
基于nodejs-websocket模块、Socket.io库实现多人在线聊天室[丰富了上传图片,发送表情等实用聊天功能]
vscode-debug-nodejs-es6, 如何使用VSCode调试 ES6 NodeJS vscode-debug-nodejs-es6如何使用VSCode调试 ES6 NodeJS 先决条件VSCode: http://code.visualstudio.com/NodeJS: https://nodejs.o
前端开源库-nodejs-latestnode js最新版本,获取最新(lts)node.js版本及其模块版本。
【Node.js】 fs模块全解析 Ⅰ. 同步与异步读取文件 Ⅱ. 同步与异步写入文件 Ⅲ. 同步与异步追加写入文件 Ⅳ. 文件状态检查 V. 目录操作 VI. 打开文件
nodejs-api 中文文档 本文档的目的是为了全面地讲解 Node.js 的 API,包括使用方法与相关概念。 每个章节分别介绍一个内置模块或高级概念。 每个主题的标题下会列出属性的类型、方法的参数、以及事件处理回调函数的...
__dirname、__filename、path.sep、path.delimiter path.dirname() 方法、path.extname() 方法、path.basename() 方法、path.parse() 方法、path.format()方法、path.normalize() 方法、path.isAbsolute() 方法、...
1、创建HTTP服务器 2、对于GET 、POST 、DELETE 、PUT方法的基本处理 3、发起HTTP请求
nodejs-模块-需要 nodejs-module-require 是一个自定义模块加载器 返回一个 {function},它正在加载类并将它们存储在一个对象中,还提供了一些额外的功能 如何使用: var mrequire = require ( "module-require" )...
Angular-Angular-NodeJS-MongoDB-CustomersService.zip,与node.js restful services pluralsight课程集成angular的代码。与node.js restful services集成angular,Angularjs于2016年发布,是Angularjs的重写版。它...
NodeJS-示例微服务项目结构要运行项目,请执行以下两个命令docker-compose构建码头工人组成
synnefo-nodejs-api 是一个模块,允许您使用 node.js 与进行通信 Synnefo 是一个用 Python 编写的完整开源云堆栈,提供计算、网络、图像、卷和存储服务。 安装 待定 用法 待定 方法 所有方法都遵循。 可以使用从源...
首先,我需要用到node的nodejs-websocket模块 使用yarn进行安装 yarn add nodejs-websocket –save 当然,你也可以用npm进行安装 npm i nodejs-websocket –save 安装完毕之后,我们开始写服务端的代码,首先,...
D:\Program Files\node\nodejs;D:\Program Files\node\node-global” 这里写图片描述 2.添加一个系统变量NODE_PATH 值为 “;D:\Program Files\node\node-global\node_modules;D:\Program Files\node\nodejs\node...
nodejs-fdf 使用 nodejs 创建 FDF 文件如何安装这个模块? 首先你必须安装 node-gyp npm -g install node-gyp rebuild之后,您可以安装 fdf 模块 git clone ...
nodejs-模块 Salsita开发的用于node.js应用程序的共享模块。 -常用的错误类别 用于捕获和显示错误的顶级中间件 中间件和服务器,用于将用户重定向到生产上的安全连接 在路线上用于验证输入的中间件 配置身份...
一个用于将远程文件下载到本地的小型NodeJS模块,可与触发器配合使用 下载远程文件 可以在每个步骤上使用触发器 要求 无需要求此模块仅使用本机NodeJS模块 对于演示,我使用了[NodeJS队列管理器]( ) 版本 1.0.0 ...
nodejs-send-data-to-casperjs 你使用吗? 但是您还需要使用吗? 不用担心。 有一个解决方案! 例子 克隆 repo 并构建应用程序 git clone git@github.... 服务器可以使用 npm 模块。