Node笔记

来源:互联网 发布:剪切一半的数据丢失了 编辑:程序博客网 时间:2024/06/05 01:07

node


调试代码
npm install supervisor -g 版本控制
supervisor test.js 版本控制器(改后台代码 不需要重启服务)
npm install/i XXX -g
npm uninstall XXX -g
npm list
node -v 版本
node -e

node最大的特性就是异步式I/O与事件紧密结合的编程模式。这种模式与传统的同步式IO线性的编程思路有很大的不同,因为控制流很大程度上要靠事件和回调函数来组织,一个逻辑要拆分为若干个单元格。
1.同步式IO和阻塞式IO
2.异步式IO和非阻塞式IO

1.node.js简介

1.1node.js是什么?

node.js是一个让JavaScript运行在服务端的开发平台

1.2.node.js能做什么?

JavaScript是为客户端而产生,node.js为网络而生。 具有复杂逻辑,基于社交网络的大web应用,web socket服务器,
tcp/udp套接字应用程序,命令行工具,交互式终端程序。。。
Node.js的产生因素:V8,javaScript在服务器端空白,事件驱动, CommonJs的规范化

1.3.异步式I/O与事件驱动

node.js最大的特性就是采用异步式I/o与事件驱动的架构设计。对于高并发的解决方案,传统的架构是多线程模型,也就是为每个业务逻辑提供一个系统线程,通过系统线程切换来弥补同步式I/O调用的时间开销。node.js使用的单线程模型,在执行的过程中会维护一个事件队列,程序在执行时进入时间循环等待下一个事件到来。
普通:res=db.query(“select * from user”)
res.output(); Node.js: res=db.query(“select * from user”,function(res){
res.output(); //回调函数 }) 程序会自动往下执行。

1.4.浏览器引擎革命

Google Chrome的引擎是V8。Node.js 的是引擎引用的就是V8。所以它快,为什么ExtJs在Chrome如此的快,就因为如此。

1.5.部署node.js的环境

Node.js官方:http:/nodejs.org  下载安装包。安装后。打开cmd的dos窗口        运行nodeconsole.log("success");

1.6.建立HTTP服务器

创建一个app.js

var http=require('http')http.createServer(function(req,res){    res.writeHead(200,{'Content-Type':'text/html'});    res.write('<h1>node.js</h1>');    res.end('<p>PCAT</p>');}).listen(3000);console.log('HTTP server is listening at port 3000.');

1.7node.js异步式I/O与事件式编程


2.回调函数与事件

2.1回调函数

2.1.1异步式读取文件。

var fs = require("fs");fs.readFile("file.txt","utf-8",function(err,data){if(err){console.log(err);}else{console.log(data);}});console.log("end")结果:  end  contents of the file.

2.1.2同步式读取文件

var fs = require("fs");var data = fs.readFileSync("file.txt","utf-8");console.log(data);console.log("end");结果:contents of the file.   end

2.1.3 分析

调用时所做的工作只是将异步式IO请求发送给了操作系统,然后立即返回并执行后面的语句,执行完以后进入事件循环监听事件,当fs接受到IO请求完成的事件时。事件循环会主动调用回调函数完成后续工作。同步则是阻塞等待完成,继续执行。

2.2事件

2.2.1 普通事件的使用

//声明事件对象var EventEmitter = require("events").EventEmitter;var event = new EventEmitter();//注册事件event.on(“some_event”,function(){console.log("这是一个自定义事件");});//触发事件setTimeout(function(){event.emit("some_event");},1000);

2.2.2node.js的事件循环机制

node什么时候进入循环—node.js程序是由事件循环开始,到事件循环结束,所有的逻辑都是事件的回调函数。
自定义事件—事件的回调函数在执行的过程中,可能会发出IO请求或直接发射(emit)事件,执行完毕后再返回事件循环。

3.模块和包

概念:模块(module)和包(package)是node.js最重要的支柱。开发一个具有一定规模的程序不可能只用一个文件,通常需要把各个功能拆分,分装,然后组合起来。模块正式为了实现这种方式而诞生,在浏览器javascript中,脚本模块的拆分和组合通常使用html的script标签来实现,node.js提供了require函数来调用其他模块,而且模块都基于文件,机制很简单,模块和包的区别是透明的,因此经常不区分。

3.1模块

3.1.1 什么是模块 Ryan 模块和文件是一一对应的,一个node.js文件就是一个模块,这个文件可能是js代码,json或者编译过的c/c++扩展。 var http
= require(“http”),其中http是node.js的一个核心模块,通过require函数获取这个模块,然后使用其中的对象。

3.1.2 创建及加载模块

1)创建模块—-node.js提供了exports和require两个对象,其中exports是模块公开的接口,require用于从外部获取一个模块的接口,即获取模块的expots对象。
2)单次加载—–require不会重复加载模块,无论调用多少次require,获取模块都是同一个文件。 3)覆盖exports—-
exports本身仅仅是一个普通的空对象,即{}, 它是专门用来声明接口。

3.2创建包

3.2.1什么是包
包是在模块基础上更深一步的抽象,node.js的包类似于C/C++的函数库或者java的类库,它讲某个独立的功能封装起来,用于发布,更新,依赖管理的版本控制。开发了npm来解决包的发布和获取需求。
3.2.2如何创建一个包

commonJS 规范的包应该具备以下特征: package.json必须在包的顶层目录下 二进制文件应该在bin目录下
js代码应该在lib目录下 文档应该在doc目录下 单元测试应该在test目录下

node.js对包要求并没有那么严格,只要顶层目录下有package.json,并符合基本规范即可。 1)作为文件夹模块
2)package.json

Node.js在调用某个包时,会检查包中package.json文件的main字段,将其作为包的接口模块,如果package.json或main字段不存在,会常事寻找index.js或index.code作为包的接口
package.json的规范属性:
name:包的名称,必须是唯一
description:包的简要说明
version:符合语义化版本识别规范的版本字符串
keywords:关键字数据,通常用于搜索
maintainers:维护者数组,每个元素要包含name、email、web可选字段
contributors:贡献者数组,格式与maintainers相同。包的坐着应该是贡献者数据的第一个元素
bugs:提交bug的地址,可以是网址或者电子邮件地址
licenses:许可证数组,每个元素要包含type和url字段
repositories:仓库托管地址数组,每个元素要包含type、url和path字段
dependencies:包的依赖,一个关联数组,由包名称和版本号组成。

4.包管理器和代码调试

4.1

5.全局对象和全局变量

5.1 全局对象与全局变量

global最根本的作用是作为全局变量的宿主。满足以下条件成为全局变量:
1.在最外层定义的变量
2.全局对象的属性
3.隐式定义的变量(未定义直接赋值的变量)
在Node.js中不可能在最外层定义变量,因为所有用户代码都是属于当前模块的,而模块本身不是最外层上下文。

5.2 process

它 用于描述当前Node.js进程状态的对象。提供了一个与操作系统的简单接口,通常写本地命令行程序的时候,会用到它。
1.process.argv是命令行参数数组,第一个元素是node,第二个元素是脚本文件名,第三个元素开始每个元素是一个运行参数。
2.process.stdout是标准输出流,通常我们使用的console.log() 其底层是process.stdout.write();实现。
3.prcess.stdin是标准输入流,初始时它是被暂停的。要想从标准输入流读取数据,必须恢复流,并手动编写流的事件相应函数。
4.process.nextTick(callback)的功能是为事件循环设置一项任务。Node.js会在下次事件循环调响应时调用callback
Node.js适合IO密集型的应用,而不是计算密集型的应用。process.nextTick()提供了一个这样工具,可以把复杂的工作拆散,编较小的事件程一个。