node05---模块
- Node.js开发服务器,数据、路由。本地关心的效果,交互;
- Node.js实际上是极客开发出的一个小玩具,不是银弹。有着别人不具备的怪异特点:
- 首先,Node不为每个用户开辟一个线程,所以非常单线程、非阻塞 I/O、事件驱动。 实际上是一个特点。
- 极端的选择了单线程。单线程,要照顾所有的用户,那么就必须有非阻塞I/O,否则一个人的I/O就把别人、自己都阻塞了。一旦有非阻塞I/O,一个人如果I/O去了,就会放弃CPU的使用权,换成另一个人使用CPU(或者执行此人后面的语句)。所以CPU的利用率100%。第一个人I/O结束了,就要用事件来通知线程,执行回调函数。此时必须有事件环,就有一个排队调度机制。Node中有超过半数的C++代码,在搭建事件环。
- Node.js和别的老牌3P不一样:
- 1) 没有自己的语法,使用V8引擎,所以就是JS。V8引擎是解析JS的,效率非常高,并且V8中很多东西都是异步的。Node就是将V8中的一些功能自己没有重写(别人做了,自己就站在巨人肩膀上),移植到了服务器上。
- 2) 没有web容器,就是安装配置完成之后,没有一个根目录。
- 命令提示符所在路径太重要了,因为程序中的所有相对路径”./”,都是相对这个命令提示符路径的,而不是相对于js文件自己。
- 系统中,80端口,就是默认http端口。所以当没有端口号的时候,就是80端口。
- server.listen(80,"127.0.0.1");
- 二、模块
- ● 在Node.js中,以模块为单位划分所有功能,并且提供了一个完整的模块加载机制,这时的我们可以将应用程序划分为各个不同的部分。
- 不可能用一个js文件去写全部的业务。肯定要有MVC。
- ● 狭义的说,每一个JavaScript文件都是一个模块;而多个JavaScript文件之间可以相互require,他们共同实现了一个功能,他们整体对外,又称为一个广义上的模块。
- ● Node.js中,一个JavaScript文件中定义的变量、函数,都只在这个文件内部有效。当需要从此JS文件外部引用这些变量、函数时,必须使用exports对象进行暴露。使用者要用require()命令引用这个JS文件。
- foo.js文件中的代码:
- 1var msg = "你好";
- 2
- 3exports.msg = msg;
- msg这个变量,是一个js文件内部才有作用域的变量。
- 如果别人想用这个变量,那么就要用exports进行暴露。
- 使用者:
- 1var foo = require("./test/foo.js");
- 2
- 3console.log(foo.msg);
- 使用者用foo来接收exports对象,也就是说,这里的foo变量,就是文件中的exports变量。
- ● 一个JavaScript文件,可以向外exports无数个变量、函数。但是require的时候,仅仅需要require这个JS文件一次。使用的它的变量、函数的时候,用点语法即可。所以,无形之中,增加了一个顶层命名空间。
- js文件中,可以用exports暴露很多东西,比如函数、变量。
- 1var msg = "你好";
- 2var info = "呵呵";
- 3function showInfo(){
- 5 console.log(info);
- 6}
- 7
- 8exports.msg = msg;
- 9exports.info = info;
- 10exports.showInfo = showInfo;
- 在使用者中,只需要require一次。
- 1var foo = require("./test/foo.js");
- 相当于增加了顶层变量。所有的函数、变量都要从这个顶层变量走:
- 1console.log(foo.msg);
- 2console.log(foo.info);
- 3foo.showInfo();
- Node中,js文件和js文件,就是被一个个exports和require构建成为网状的。
- 不是靠html文件统一在一起的。
- ● 可以将一个JavaScript文件中,描述一个类。用
- module.export = 构造函数名;
- 的方式向外暴露一个类。
- 也就是说,js文件和js文件之间有两种合作的模式:
- 1) 某一个js文件中,提供了函数,供别人使用。 只需要暴露函数就行了; exports.msg=msg;
- 2) 某一个js文件,描述了一个类。 module.exports = People;
- ● 如果在require命令中,这么写:
- 1var foo = require("foo.js"); //没有写./, 所以不是一个相对路径。是一个特殊的路径
- 那么Node.js将该文件视为node_modules目录下的一个文件
- node_modules文件夹并不一定在同级目录里面,在任何直接祖先级目录中,都可以。甚至可以放到NODE_PATH环境变量的文件夹中。这样做的好处稍后你将知道:分享项目的时候,不需要带着modules一起给别人。
- ● 我们可以使用文件夹来管理模块,比如
- 1var bar = require("bar");
- 那么Node.js将会去寻找node_modules目录下的bar文件夹中的index.js去执行。
- 每一个模块文件夹中,推荐都写一个package.json文件,这个文件的名字不能改。node将自动读取里面的配置。有一个main项,就是入口文件:
- 1{
- 2 "name": "kaoladebar",
- 3 "version": "1.0.1",
- 4 "main" : "app.js"
- 5}
- 6
- package.json文件,要放到模块文件夹的根目录去。
04.js
- /**
- * Created by Danny on 2015/9/20 10:28.
- */
- var foo = require("./test/foo.js");// './'表示这个文件的根目录
- console.log(foo.msg);
- console.log(foo.info);
- foo.showInfo();
foo.js
- /**
- * Created by Danny on 2015/9/20 10:29.
- */
- console.log("111");// 引入本文件会执行这行代码
- var bar = require("./bar.js");
- var msg = "你好";
- var info = "呵呵";
- function showInfo(){
- console.log(info);
- }
- exports.msg = msg;
- exports.info = info;
- exports.showInfo = showInfo;
bar.js
- /**
- * Created by Danny on 2015/9/20 11:58.
- */
- console.log("我是bar");// 引入本文件会执行这行代码
05.js
- /**
- * Created by Danny on 2015/9/20 10:28.
- */
- var People = require("./test/People.js");
- var xiaoming = new People("小明","男","12");
- xiaoming.sayHello();
People.js
- /**
- * Created by Danny on 2015/9/20 10:43.
- */
- function People(name,sex,age){
- this.name = name;
- this.sex = sex;
- this.age = age;
- }
- People.prototype = {
- sayHello : function(){
- console.log(this.name + this.sex + this.age);
- }
- }
- //此时,People就被视为构造函数,可以用new来实例化了。
- module.exports = People;
06.js
- /**
- * Created by Danny on 2015/9/20 10:28.
- */
- var foo = require("foo.js"); //没有写./,将该文件视为node_modules目录下的一个文件
- console.log(foo.msg);
07.js
- /**
- * Created by Danny on 2015/9/20 10:28.
- */
- var bar = require("bar");
- /*
- 在引用一个文件夹,将会去寻找node_modules目录下的bar文件夹中的index.js去执行。 没有index.js时,每一个模块文件夹中,推荐都写一个package.json文件,这个文件的名字不能改。node将自动读取里面的配置。有一个main项,就是入口文件:
- 1{
- 2 "name": "kaoladebar",
- 3 "version": "1.0.1",
- 4 "main" : "app.js"
- 5}
- 6
- package.json文件,要放到模块文件夹的根目录去。*/
- console.log(bar.msg);
node05---模块的更多相关文章
- Python第十三天 django 1.6 导入模板 定义数据模型 访问数据库 GET和POST方法 SimpleCMDB项目 urllib模块 urllib2模块 httplib模块 django和web服务器整合 wsgi模块 gunicorn模块
Python第十三天 django 1.6 导入模板 定义数据模型 访问数据库 GET和POST方法 SimpleCMDB项目 urllib模块 urllib2模块 ...
- npm 私有模块的管理使用
你可以使用 NPM 命令行工具来管理你在 NPM 仓库的私有模块代码,这使得在项目中使用公共模块变的更加方便. 开始前的工作 你需要一个 2.7.0 以上版本的 npm ,并且需要有一个可以登陆 np ...
- node.js学习(三)简单的node程序&&模块简单使用&&commonJS规范&&深入理解模块原理
一.一个简单的node程序 1.新建一个txt文件 2.修改后缀 修改之后会弹出这个,点击"是" 3.运行test.js 源文件 使用node.js运行之后的. 如果该路径下没有该 ...
- ES6模块import细节
写在前面,目前浏览器对ES6的import支持还不是很好,需要用bable转译. ES6引入外部模块分两种情况: 1.导入外部的变量或函数等: import {firstName, lastName, ...
- Python标准模块--ContextManager
1 模块简介 在数年前,Python 2.5 加入了一个非常特殊的关键字,就是with.with语句允许开发者创建上下文管理器.什么是上下文管理器?上下文管理器就是允许你可以自动地开始和结束一些事情. ...
- Python标准模块--Unicode
1 模块简介 Python 3中最大的变化之一就是删除了Unicode类型.在Python 2中,有str类型和unicode类型,例如, Python 2.7.6 (default, Oct 26 ...
- Python标准模块--Iterators和Generators
1 模块简介 当你开始使用Python编程时,你或许已经使用了iterators(迭代器)和generators(生成器),你当时可能并没有意识到.在本篇博文中,我们将会学习迭代器和生成器是什么.当然 ...
- 自己实现一个javascript事件模块
nodejs中的事件模块 nodejs中有一个events模块,用来给别的函数对象提供绑定事件.触发事件的能力.这个别的函数的对象,我把它叫做事件宿主对象(非权威叫法),其原理是把宿主函数的原型链指向 ...
- 理解nodejs模块的scope
描述 原文档地址:https://docs.npmjs.com/misc/scope 所有npm模块都有name,有的模块的name还有scope.scope的命名规则和name差不多,同样不能有ur ...
- nodejs模块发布及命令行程序开发
前置技能 npm工具为nodejs提供了一个模块和管理程序模块依赖的机制,当我们希望把模块贡献出去给他人使用时,可以把我们的程序发布到npm提供的公共仓库中,为了方便模块的管理,npm规定要使用一个叫 ...
随机推荐
- Ubuntu 常用快捷键
本系列文章由 @YhL_Leo 出品,转载请注明出处. 文章链接: http://blog.csdn.net/yhl_leo/article/details/50285313 1 桌面 快捷键 作用 ...
- JDBC-Statement 对象
Statement 对象 一旦我们获得了数据库的连接,我们就可以和数据库进行交互.JDBC 的 Statement,CallableStatement 和 PreparedStatement 接口定义 ...
- Maven传递依赖的时候,同名包不同版本号的包均会下载,可是编译的时候,仅仅会载入一个高版本号的。
描写叙述,在一个Maven项目中.同一时候依赖了spring-tomcat-weaver 和 struts-core 包.可是spring-tomcat-weaver 须要commons-dige ...
- 怎样訪问pcie整个4k的配置空间
眼下用于訪问PCIe配置空间寄存器的方法须要追溯到原始的PCI规范. 为了发起PCI总线配置周期,Intel实现的PCI规范使用IO空间的CF8h和CFCh来分别作为索引和数据寄存器,这样的方法能够訪 ...
- poj_3468线段树成段更新求区间和
#include<iostream> #include<string.h> #include<cstdio> long long num[100010]; usin ...
- kafka 0.11 spark 2.11 streaming例子
""" Counts words in UTF8 encoded, '\n' delimited text received from the network every ...
- 关于JQuery中的事件冒泡
什么是事件冒泡? 事件冒泡就是当父元素和子元素存在同一事件时在子元素的事件处理程序中会自动调用其父级元素的事件处理程序. demo: <!DOCTYPE html> <html xm ...
- 51nod 1267 4个数和为0 思路:哈希map+避免重复的点
题目: 总结大佬们的思路: 思路1:所有数两两求和,存入map中,每次判断有没有相反数被标记过. 思路2:对所有数排序,排完所有数两两求和,结果正好是排好序的.然后扫一遍,二分查找看之前有没有相反数存 ...
- (Spring+IBatis+Struts1+Struts2+Hibernate+Java EE+Oracle)
原文出处:http://space.itpub.net/6517/viewspace-609654 1.Spring架构图 Spring是一个开源框架,是为了解决企业应用程序开发复杂性而创建的.框架的 ...
- About CNN(convolutional neural network)
NO.1卷积神经网络基本概念 CNN是第一个被成功训练的多层深度神经网络结构,具有较强的容错.自学习及并行处理能力.最初是为识别二维图像而设计的多层感知器,局部连接和权值共享网络结构 类似于生物神经网 ...