Node
创建node应用
- 引入require模块 var http = require("http");
- 创建服务器 http.createServer()
绑定端口: .listen()
request, response 参数来接收和响应数据
至此完成了一个可以工作的服务器
REPL(交互式解释器)
表示一个电脑环境,类似window和Linux;可以进行运算,_用来获取上一次的结果;
常用命令:
Ctrl + c 退出当前终端
Ctrl + c 两次 or Ctrl + d 退出repl
Tab 列出当前命令
.help 列出使用命令
.break or .clear退出多行表达式
.save filename - 保存当前的 Node REPL 会话到指定文件
.load filename - 载入当前 Node REPL 会话的文件内容。
回调函数
Node的异步变成的直接体现就是回调
Eg:文件的同步读取与异步读取
异步读取(readFile)文件的时候由操作系统在后台进行读取,不会阻碍下面的代码执行。
同步读取(readFileSync)的时候会阻碍下面的代码执行;
事件循环
Node单线程单进程,但支持回调和并发。
- 引入event模块 var events = require(‘event’);
- 创建eventEmitter模块 var eventEmitter = events. EventEmitter()
- 绑定事件处理程序 eventEmitter.on(‘eventName’,eventHandler)
- 触发事件 eventEmitter.emit(‘eventName’)
EventEmitter
异步 I/O 操作在完成时都会发送一个事件到事件队列;
在使用的时候在对象中继承它,原因有:
1.首先,具有某个实体功能的对象实现事件符合语义,事件的监听和发生应该是一个对象的方法。
2.其次 JavaScript 的对象机制是基于原型的,支持 部分多重继承,继承 EventEmitter 不会打乱对象原有的继承关系。
Buffer
专门存放二进制数据的缓存区
创建buffer类:
1.Buffer.alloc(size[, fill[, encoding]]): 返回一个指定大小的 Buffer 实例,如果没有设置 fill,则默认填满 0
2.Buffer.allocUnsafe(size): 返回一个指定大小的 Buffer 实例,但是它不会被初始化,所以它可能包含敏感的数据
3.Buffer.allocUnsafeSlow(size)
4.Buffer.from(array): 返回一个被 array 的值初始化的新的 Buffer 实例(传入的 array 的元素只能是数字,不然就会自动被 0 覆盖)
5.Buffer.from(arrayBuffer[, byteOffset[, length]]): 返回一个新建的与给定的 ArrayBuffer 共享同一内存的 Buffer。
6.Buffer.from(buffer): 复制传入Buffer 实例的数据,并返回一个新的 Buffer 实例
7.Buffer.from(string[, encoding]):返回一个被 string 的值初始化的新的 Buffer 实例
还有许多读取写入长度和JSON方法就不一一列举了
Stream
所有的 Stream 对象都是 EventEmitter 的实例.
从流中读取数据:
var fs = require(‘fs’)
- 创建可读流:fs.createReadStream()
- 设置编码: .setEncoding()
- 处理事件流: data、on、error
写入流:
var fs = require(‘fs’);
- 创建可写流: fs.createWriteStream()
- 写入数据: .write(data,’UTF-8’)
- 标记末尾: .end()
管道流:
1.创建可读流
2.创建可写流
3.read.pipe(write)
链式流:
通过连接输出流到另外一个流并创建多个流操作链的机制
模块系统
把一个对象封装在模块中 module.export = function(){ }
函数
与JS的函数差不多
全局对象
Node的全局对象时global,所有全局变量都是它的属性;
全局变量:
在最外层定义的变量;
全局对象的属性;
隐式定义的变量(未定义直接赋值的变量)。
一些具体的全局变量和方法在使用的时候积累
常用工具
util 常用的函数集合
util.inspect()----将任意对象转化为字符串
文件系统(fs)
异步和同步
异步的方法函数最后一个参数为回调函数,回调函数的第一个参数包含了错误信息。
打开文件 .open()
获取文件信息 .stat()
写入文件 .writeFile()
== 对于文件的操作
GET / POST请求
GET请求:
请求直接被嵌入在路径中,URL是完整的请求路径,包括了?后面的部分
url.parse()解析URL中的参数
POST请求:
内容全部的都在请求体中
Express框架
Express官网: http://expressjs.com/
Express4.x API 中文版: Express4.x API Chinese
Express4.x API:http://expressjs.com/zh-cn/4x/api.html