Node.js

npm全称为Node Package Manager,是一个基于Node.js的包管理器

Node.js REPL(交互式解释器Read Eval Print Loop)
表示一个电脑的环境,Window系统的终端、linux shell.
在这里插入图片描述
Node.js回调函数
回调是异步编程的直接体现。

同步读取文件(阻塞)
var fs = require(‘fs’);
var data = fs.readFileSync(‘input.txt’);
console.log(data.toString());
console.log(‘程序执行结束’);
//先执行文件操作,再执行最后的打印。
异步读取文件(非阻塞)
在这里插入图片描述

Node.js事件循环
Node.js是单线程单进程应用程序,但是通过事件回调支持并发。
在这里插入图片描述

Node.js事件
required(‘events’); //引入事件模块
events 模块只提供了一个对象: events.EventEmitter。EventEmitter 的核心就 是事件发射与事件监听器功能的封装。{支持多个事件监听}
{如果有多个同名的事件,会按顺序去执行}
在这里插入图片描述
EventEmitter常用的API

  1. 注册监听器

EventEmitter.on(event,listener);
emitter.addListener(event.listener);
//event:字符串
//listener:回调函数

  1. 发射Event事件
    EventEmitter.emit(event,[arg1],[arg2])
    EventEmitter.once(event,listener) //为指定事件注册一个最多只能触发一次的监听器。触发之后解除改监听器。

  2. 移除指定的某个监听器,listener必须是已经被注册过的监听器
    EventEmitter.removeListener(event, listener)
    EventEmitter.removeAllListeners([event])移除所有事件的所有监听器, 如果指定 event,则移除指定事件的所有监听器。

  3. error事件
    在这里插入图片描述
    缓冲区
    Node.js语言自身只有字符串数据类型,没有二进制数据类型。
    处理TCP流或文件流时,必须使用二进制数据,所以定义了一个buffer类,创建一个专门存放二进制数据的缓冲区。

  4. 创建buffer类:

1、var buf = new Buffer(10); //创建长度为10自己的buffer实例
2、var buf = new Buffer([10,20,30,40]); //给给定的数组创建buffer实例
3、var buf = new Buffer(’“ewewewe”,“utf-8”); //通过一个字符串来创建buffer实例

  1. 写入缓冲区

buf.write(string,[offset],[length],[encoding]) //返回值实际写入的大小,返回实际写入的大小。如果 buffer 空间不足, 则只会写入部分字符串
string : 写入的字符串
offset : 缓冲区开始写入的索引值
length : 写入的字节数
encoding : 使用的编码。默认为utf-8

  1. 从缓冲区取数据

buf.toString(encoding,[start],[end])
>

  1. 将buffer转换为JSON对象

buf.toJSON()
在这里插入图片描述

  1. 缓冲区合并

Buffer.concat(list,totalLength);
list : 用于合并的buffer对象数组列表
totalLength ; 指定合并后Buffer对象的长度。
在这里插入图片描述

  1. 缓冲区比较

buf.compare(otherBuffer);

  1. 拷贝缓冲区

buf.copy(target[, targetStart[, sourceStart[, sourceEnd]]])
buffer1.copy(buffer2);
//buffer2 内容是拷贝 buffer1 的

  1. 缓冲区裁剪

buf.slice([start[, end]])
//start - 数字, 可选, 默认: 0
end - 数字, 可选, 默认: buffer.length

Node.js stream流
该抽象接口是可读、可写或是既可读又可写的,通过这些接口,我们可以和磁盘文件、套接字、HTTP请求来交互,实现数据从一个地方流动到另一个地方的功能。
Node.js,Stream 有四种流类型:
Readable - 可读操作。
Writable - 可写操作。
Duplex - 可读可写操作.
Transform - 操作被写入数据,然后读出结果。
所有的 Stream 对象都是 EventEmitter 的实例。常用的事件有:
data - 当有数据可读时触发。
end - 没有更多的数据可读时触发。
error - 在接收和写入过程中发生错误时触发。
finish - 所有数据已被写入到底层系统时触发。
在这里插入图片描述
链式流压缩文件和解压文件
在这里插入图片描述
Node.js模块系统

  1. 创建模块
    Node.js 提供了exports 和 require 两个对象,其中 exports 是模块公开的接口,require 用于从外部获取一个模块的接口,即所获取模块的 exports 对象
    在这里插入图片描述
    Node.js函数

Node.js路由
在这里插入图片描述
Node.js全局对象
global全局对象无需引用就可以直接使用。
Node.js中能够直接访问的对象都是global的属性。【console、porcess】等
{在最外层定义的变量、全局对象的属性、未定义直接赋值的变量}
process:它用于描述当前Node.js 进程状态 的对象,提供了一个与操作系统的简单接口。

Node.js常用工具util
util作为Node.js的一个核心模块,能够提供常用函数的集合,弥补核心JavaScript的功能过于精简的不足。

  1. util.inherits:实现对象间原型继承的函数
    Sub仅仅继承了Base在原型中定义的函数,而构造函数内部创造的base属性和sayHello函数都没有被Sub继承。同时继承原型的方法不会被console.log()打印出来。
    在这里插入图片描述在这里插入图片描述

  2. util.inspect(object,[showHidden],[depth],[colors])
    方法可以将任意对象转换为字符串,通常用于调试和错误输出。它至少接受一个object参数,即要转换的对象。
    showHidden是一个可选参数,如果值为true,将会输出更多隐藏信息。
    depth表示最大递归的层数,如果对象很复杂,你可以指定层数以控制输出信息的多少。如果不指定depth,则默认递归2层,指定为null时表示将不限递归层数完整遍历对象。

  3. util.isArray(object)
    如果给定的参数 “object” 是一个数组返回true,否则返回false。

  4. util.isRegExp(object)
    如果给定的参数"object"是一个正则表达式返回true,否则返回false。

  5. util.isDate(object)
    如果给定的参数 “object” 是一个日期返回true,否则返回false。

  6. util.isError(object)
    如果给定的参数 “object” 是一个错误对象返回true,否则返回false。

Node.js文件系统
Node.js文件系统被封装在fs模块中,它提供了文件的读取写入更名删除遍历目录链接等POSIX文件系统操作。
fs的所有模块都有异步和同步两个版本

  1. fs.readFile(filename,[encoding],[callback(err,data)])、【fs.readFileSync()同步读取文件】
    在这里插入图片描述

  2. fs.open(path, flags, [mode], [callback(err, fd)])
    flag:
    r :以读取模式打开文件。
    r+ :以读写模式打开文件。
    w :以写入模式打开文件,如果文件不存在则创建。
    w+ :以读写模式打开文件,如果文件不存在则创建。
    a :以追加模式打开文件,如果文件不存在则创建。
    a+ :以读取追加模式打开文件,如果文件不存在则创建

  3. fs.read(fd, buffer, offset, length, position, [callback(err, bytesRead, buffer)])
    fd: 读取数据并写入buffer指向的缓冲区对象。
    offset: 是buffer的写入偏移量。
    length: 是要从文件中读取的字节数。
    position: 是文件读取的起始位置,如果position的值为null,则会从当前文件指针的位置读取。
    callback:回调函数传递bytesRead和buffer,分别表示读取的字节数和缓冲区对象。
    在这里插入图片描述
    Node.js工具模块

  4. OS模块

  5. Path模块

  6. Net模块

  7. DNS模块

  8. Domain模块

Node.js web模块
Client - 客户端,一般指浏览器,浏览器可以通过HTTP协议向服务器请求数据。
Server - 服务端,一般指Web服务器,可以接收客户端请求,并向客户端发送响应数据。
Business - 业务层, 通过Web服务器处理应用程序,如与数据库交互,逻辑运算,调用外部程序等。
Data - 数据层,一般由数据库组成。

服务器端代码执行之后 通过127.0.0.1/index.htm可以访问index.htm文件
浏览器通过url发起http请求,请求到127.0.0.1服务器,再通过js的文件解析和相应将文件发送到浏览器。
在这里插入图片描述
Node.js创建web客户端
服务器端和客户端代码一起使用cmd运行,之后会显示一个完整的请求与响应结果
在这里插入图片描述
Node.js express框架
可以设置中间件来响应HTTP请求。
定义了路由表用于执行不同的HTTP请求动作。
可以通过向模板传递参数来动态渲染HTML页面

安装express并且保存到依赖中
npm install express --save
在这里插入图片描述
express路由
在这里插入图片描述
express静态资源
get方法

Node.js多进程
Node.js使用事件驱动处理并发,每个子进程带有三个流对象child.stdin, child.stdout和child.stderr

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值