目录
1.node采用的事件驱动模式来进行事件处理的:只有当事件被触发时才执行相关程序
2.node是单线程运行的:采用事件轮询方式,不断的查询事件队列中的消息,然后根据消息执行对应的回调函数
(1)事件(Event):使用node的内置模块'events'
(2)事件发射器(EventEmitter):是一个类。使用时创建该类的对象,通过对象调用以下的方法
(1)__filename:表示正在执行的文件的文件名。带绝对路径的文件名(绝对路径+文件名)
(1)stdout:返回的是一个对象,代表一个标准输出。它下面的方法write,作用和console.log方法一样
1.是node中实现标准输入输出的模块,可以逐行的读取终端的数据。使用时必须通过require引入
(2)创建readline模块的实例,该实例的input属性值就是process.stdin,output属性值是process.stdout
3.readline模块的事件:line --- 会在用户输入一行,按回车键后触发
1.web服务器:专门处理通过http协议发送的用户请求的应用程序。可以给用户返回信息,这些信息可以是文本、图片、html文档等
(2)parse(字符串):将给定的字符串解析成url对象返回。url对象的属性包括:
一.node的事件处理
1.node采用的事件驱动模式来进行事件处理的:只有当事件被触发时才执行相关程序
2.node是单线程运行的:采用事件轮询方式,不断的查询事件队列中的消息,然后根据消息执行对应的回调函数
3.node事件机制中的三个角色
(1)事件(Event):使用node的内置模块'events'
(2)事件发射器(EventEmitter):是一个类。使用时创建该类的对象,通过对象调用以下的方法
addListener(事件名,事件处理程序)
on(事件名,事件处理程序):注册事件监听
removeListener(event,listener):删除事件监听
emit(事件名):手动触发指定的事件
(3)事件监听器(EventListener):
// 导入events模块
const events = require('events')
// 2.创建EventEmitter类的对象
// const EventEmitter = events.EventEmitter
const eventEmitter = new events.EventEmitter()
// 3.注册事件
eventEmitter.on('rabbit',function(){//'rabbit'是自定义的事件名
console.log('疫情严重,保护好自己')
})
// 4.手动触发'rabbit'事件
eventEmitter.emit('rabbit')
// 导入http模块
const http = require('http')
const { url } = require('inspector')
// 1.创建server
const server = http.createServer()
/* 2.给服务器绑定(注册)事件:request --- 请求事件(处理客户端的请求)
req:请求对象。服务器通过该对象获取客户端的请求信息
res:响应信息。服务器通过该对象向客户端发送信息 */
server.on('request',(req,res)=>{//req:表示请求对象(存放了客户端的请求信息);res:表示响应对象(用于服务器向客户端发送响应信息)
/* let info = req.url//req.url:客户端的url
console.log(info)
info = info.substring(2,info.length)
let temp = info.split('=')
res.end(`hello,${temp[1]}`)//服务器向客户端发送字符串:'hello,'+用户名 */
let info = url.parse(req.url)
let query = info.query
/* console.log(req.url)//req.url:客户端的url
res.end('hello,server')//服务器向客户端发送字符串:'hello,server' */
})
// 3.启动监听:指定服务器地址、端口号
server.listen(8089,'127.0.0.1')
二.node的全局对象
1.全局变量
(1)__filename:表示正在执行的文件的文件名。带绝对路径的文件名(绝对路径+文件名)
(2)__dirname:表示当前正在执行的文件所在的目录
console.log('文件名:'+__filename)
console.log('文件路径:'+__dirname)
2.全局对象
process对象:存放的node的进程信息,可以放在程序的任何位置,也不用require进行加载
console.log('系统信息:',process)
程序:静态的代码
进程:运行中的程序
线程:是进程的一个小的单元
process对象的属性: