Nde模块篇
/*模块分为两种:原生模块和文件模块。原生模块即Node.js API提供的原生模块,原生模块在启动时已经被加载。文件模块即为动态加载模块,加载文件
模块的工作主要由原生模块 module 来实现和完成。原生模块在启动时已经加载,文件模块则需要通过调用Node.js 的 require 方法来实现加载。
Node.js会对原生模块和文件模块都进行缓存,因此在第二次require该模块时,不会有重复的开销去加载模块,只需要从缓存中读取相应模块数据即可。
Node.js如何处理模块
Node.js中原生模块和文件模块的调用方法存在一定的区别,但是二者的应用大同小异。
1.原生模块的调用
应用Node.js提供的API require来加载相应的Node.js模块,require加载成功后会返回一个Node.js模块的对象,该对象拥有的所有属性和方法,例如:
var httpModule = require('http');//require http模块
http:HTTP时Node.js提供的原生模块,该模块中有createServer、request和get等多个方法和属性,这些都可以在API文档中查找到
httpModule:则require原生HTTP模块后返回的对象,通过该对象可以调用HTTP模块的所有方法和方法。
httpModule.creatServer(function(res,req){}).listen(port)//调用httpModule的对象方法
httpModule对象调用了HTTP模块中的createServer和lister方法来创建简单的http服务器
2.文件模块调用方法
文件模块的调用和原生模块的调用方式基本一致,但是需要注意的是,原生模块的加载不需要指定模块的路径,而文件模块加载时必须指定文件路径
否则会出现"can not find XX module"。
var test = require('/path/.../test.js')也可以var test = require('/path/.../test')
/path/.../test.js:代表test文件模块的绝对路径,如果需要使用相对路径,则需要在路径前加一个"./",例如require('./test.js')
/path/.../test.js也可以省略js后缀名
test返回值:require加载模块成功后返回的同样也是一个对象
在得到require返回对象test以后,那么该test对象可以调用文件模块的那些属性和方法呢?Node.js中明确指出,在文件模块中,只有express和
module.express对象暴露给该外部的属性和方法,才能够通过返回的require对象进行调用,其他方法和属性是无法获取的,因此test对象只能调用
test.js文件模块中的exports和module.exports的方法和属性。例如test.js中的love方法和yourName属性不能通过返回test对象进行调用,而由于
name属性和exports暴露给调用者,因此二者可以通过test对象访问。
*/
exports.name = "xiao er";
exports.happy = function(){
console.log("mm");
};
var yourName = "reader";
function love(){
console.log("mm vs gg")
}
/*
test对象可见属性和方法:只有name属性和happy方法是通过调用exports,因此对于require加载模块后返回对于require加载模块返回后的test
对象来说,其可见方法和属性只有name和happy。
test对象不可见属性和方法:yourName属性和love方法由于没有调用exports,返回暴露给外部调用者,因此对require返回烦人对象test是不可见
的,这点类似于类的私有成员和私有方法。
我们通过代码打印出来的require后的test对象信息,查看其拥有的属性和方法。
由此看来,仅有exprots和module.exprots的方法和属性是可见的。
*/
Nde模块篇的更多相关文章
- Arduino 各种模块篇 摇杆模块
Arduino的另外几种模块,我们常见的joystick摇杆模块. 用起来很爽,摇杆 有X,Y轴可调 这里有一篇非常想尽的示例代码: http://www.geek-workshop.com/foru ...
- python之常用模块篇5
一.日志模块,logging模块 1)logging模块简单使用,屏幕输出.默认级别30 import logging logging.debug( logging.info( logging.war ...
- Python之模块篇
简介 你已经学习了如何在你的程序中定义一次函数而重用代码.如果你想要在其他程序中重用很多函数,那么你该如何编写程序呢?你可能已经猜到了,答案是使用模块.模块基本上就是一个包含了所有你定义的函数和变量的 ...
- Arduino 各种模块篇 蓝牙模块 手机蓝牙控制Arduino LED灯
解决方案. 条件: 1.手机android 商店下载 blueTerm 2.向arduino中载入如下代码: char val; ; void setup() { Serial.begin(); pi ...
- AngularJS高级程序设计读书笔记 -- 模块篇
一. 模块基础 1. 创建模块 <!DOCTYPE html> <html ng-app="exampleApp"> <head> <ti ...
- Nodejs的运行原理-模块篇
前言 使用Nodejs,就不可避免地引用第三方模块,它们有些是Nodejs自带的(例:http,net...),有些是发布在npm上的(例:mssql,elasticsearch...) 本篇章聚焦3 ...
- nodejs笔记--模块篇(三)
文件模块访问方式通过require('/文件名.后缀') require('./文件名.后缀') requrie('../文件名.后缀') 去访问,文件后缀可以省略:以"/&qu ...
- python 学习分享-常用模块篇
模块 就是前人给你造的轮子,你开车就好!!! 常用模块有: time模块 random模块 os模块 sys模块 shutil模块 json & picle模块 shelve模块 xml处 ...
- 二、Ansible基础之模块篇
目录 1. Ansible Ad-Hoc 命令 1.1 命令格式 1.2 模块类型 1.3 联机帮助 1.3.1 常用帮助参数 1.4 常用模块 1.4.1 command & shell 模 ...
随机推荐
- 用Qt写软件系列一:QCacheViewer(浏览器缓存查看器)
介绍 Cache技术广泛应用于计算机行业的软硬件领域.该技术既是人们对新技术探讨的结果,也是对当前软硬件计算能力的一种妥协.在浏览器中使用cache技术,可以大幅度提高web页面的响应速度,降低数据传 ...
- 数论 - 算数基本定理的运用 --- nefu 118 : n!后面有多少个0
题目链接:http://acm.nefu.edu.cn/JudgeOnline/problemshow.php Mean: 略. analyse: 刚开始想了半天都没想出来,数据这么大,难道是有什么 ...
- PHP学习笔记:数据库学习心得
存储过程: 存储过程(Stored Procedure)是一组为了完成特定功能的SQL 语句集,经编译后存储在数据库.中用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它. 因为语 ...
- ahjesus sql2005+游标示例
DECLARE @TypeId INT, @Price1 FLOAT, @Original FLOAT DECLARE my_cursor CURSOR SCROLL FOR SELECT TypeI ...
- 胖AP(1602i)与苹果设备之间的问题总结
问题现象: 苹果设备(5GHz)连接不稳定,表现为时断时续,或者加入无线的时候一直加入不进去. 有些2.4GHz设备会在几个AP之间相互跳. 分析: 1. 先说苹果设备,它既支持2.4G 也支持5G, ...
- CSS后代选择器,子选择器和相邻兄弟选择器
平时在代码练习中,经常用到后代选择器,子选择器也会用到,这里做个总结: 1,后代选择器和子选择器区别: ①写法不一样:后代选择器的标识为:空格 如:ul li{width:150px;} [ul和li ...
- SharePoint 数据迁移解决方案
前言:说来惭愧,我们的SharePoint内网门户跑了2年,不堪重负,数据量也不是很大,库有60GB左右,数据量几万条,总之由于各种原因吧,网站速度非常慢,具体问题研究了很久,也无从解决,所有考虑用N ...
- SharePoint 网站登录不上,3次输入用户名/密码白页
新搭建的SharePoint 2013环境,第一次干的这么憋屈的慌,先是接了一个Ghost的服务器,装好的服务器.Sql.SharePoint.VS等一系列,却发现怎么都登陆不上去,输入账号3次以后白 ...
- Sharepoint学习笔记—习题系列--70-573习题解析 -(Q127-Q130)
Question 127You create a custom list named Products.You need to perform a Representational State Tra ...
- Android自动更新安装后显示‘完成’‘打开’按钮
/** * 安装apk * * @param url */ private void installApk() { File apkfile = new File(apkFilePath); if ( ...