这几天在学习node,以下的笔记主要是自己看《Node.js开发指南》的笔记,下面的内容主要是1到4章的
单线程、异步式I/O、事件驱动式的程序设计模型
Node.Js是可以让JavaScript运行在服务器端的开发平台
Node.js内建了一个HTTP服务器支持,也就是你可以轻而易举地实现一个网站和服务器的组合
Node.js还可以部署到非网络应用的环境下,比如一个命令行工具
Node.js可以调用C/C++的代码Node.js在执行的过程中会维护一个事件队列,程序在执行时进入事件循环等待下一个事件到来,每个异步式I/O请求完成后会被推送到事件队列中,等待程序进程进行处理
内存上下文切换??
- 回调函数很重要
Node.js的异步机制是基于事件的,所有的I/O、网络通信、数据库查询都以非阻塞的方式请求,返回的结果由事件循环处理
第三章 Node.js的快速入门
node script.js 其中script.js 就是脚本的文件名
node -e "console.log('Hello')"
- Node的REPL模式,REPL
(Read-eval-print loop)
,即输入—求值—输出循环 - 两次Ctrl+c退出该模式
使用supervisor可以实现“热加载
supervisor 文件名
当线程遇到I/O操作时候,不会以阻塞的方式等待I/O操作的完成或者数据的返回,而是将I/O请求发送给操作系统,继续执行下一条语句。当操作系统完成I/O操作时候,以事件的形式通知I/O操作的线程,线程会在待定的时间处理这个事件
单线程、非阻塞
I/O部分和计算部分。通常I/O部分占用的时间比计算的部分多得多
- 异步式I/O比传统的多线程阻塞式I/O少了多线程的开销
EventEmitter
require不会重复加载模块
覆盖exports
exports
使用module.exports = Hello
代替exports.Hello = Hello
CommonJs规范应该具备以下特征:
npm是node官方提供的包管理工具
获取一个包
npm [install/i] [package_name]
本地模式和全局模式npm [install/i] -g [package_name]
本地模式不会注册PATH环境变量,仅仅是把包安装到node_modules子目录下,其中的bin目录没有包含在PATH环境变量中,不能在命令行中调用
使用全局模式安装的包并不能直接在 JavaScript 文件中用require获得,因为 require 不会搜索 /usr/local/lib/node_modules/。
npm link
不支持Windows通过使用
npm init
可以根据交互式问答产生一个符合标准的package.jsonnpm pubilsh
发布包 package.json中修改version字段,重新使用npm publish
重新发布node中的全局对象是global,所有的全局变量(除了global本身以外)都是global对象的属性
process就是一个全局变量,即global对象的属性。它用于描述当前node进程状态的对象,提供一个与操作系统的简单接口
process.nextTick(callback)
的功能是为事件循环设置一项任务,Node.js会在下一次事件循环响应时候调用callback常用工具util是node的核心模块,提供常用函数的集合,用于弥补核心JavaScript的功能过于精简的不足
util.inherit(constructor,superConstructor)
是一个实现对象间原型继承的函数util.inspect(object,[showHidden],[depth],[])
是将任意对象转换成字符串的方法,通常用于调试或者错误输出对于每个时间,EventEmitter支持若干个事件监听器
Node标准库提供了http模块,其中封装了高效的HTTP服务器和一个简易的HTTP客户端
http.Server是HTTP模块中的HTTP服务器对象,用Node.js做的所有基于HTTP协议的系统,如网站、社交应用甚至代理服务器,都是基于http.Server实现的
http.Server的事件
对它的事件编写响应函数即可实现http服务器的所有功能
request
connection
closehttp.createServer([requestListener])
功能是创建一个HTTP服务器并将requestListener作为request事件的监听函数http.ServerRequest
是HTTP请求的信息
一般由http.Server的request事件发送的,作为第一个参数进行传递
以下3个事件用于控制请求体传输data
end
close
http.ServerResponse
是返回给客户端的信息,决定了用户最后能够看到的内容。也是有http.Server
的request事件发送的,作为第二个参数进行传递
- http模块提供两个函数http.request和http.get,功能是作为客户端向http服务器发起请求
http.request(options,callback)
发起http请求。option是类似关联数组的对象,表示请求的参数,callback是请求的回调函数
http.ClientRequest
是由http.request或者http.get返回的对象,表示一个已经产生而且正在进行的http请求