Node的介绍和基本使用(更新ing)

自己的有道云

一、什么是Node?

node是一个基于Chrome V8引擎的javascript运行环境,是运行在服务器端的javascript
可以使用node搭建服务器,连接数据库。让前端开发人员走向后端开发。
Node.js使用了一个事件驱动、非阻塞I/O口,使其轻量且高效
Node的包管理工具npm,是全球最大的开源库生态系统

二、为什么要学习node?

他很火
他很强

三、node的环境搭建参考笔记:

自己有道云
检测是否安装成功

在这里插入图片描述

四、交互式解析器

Node 自带了交互式解释器,可以执行以下任务:
读取 - 读取用户输入,解析输入了Javascript 数据结构并存储在内存中
执行 - 执行输入的数据结构
打印 - 输出结果
循环 - 循环操作以上步骤直到用户两次按下 ctrl-c 按钮退出
通过node命令进入交互式解析器

在这里插入图片描述

四、http模块创建服务

引入http模块

var http = require('http');
console.log(hhtp)

创建服务
在这里插入图片描述

/* 

	创建服务
	request请求	response响应
 */
http.createServer(function(request,response){
   
	
	// writeHead设置响应请求头
	response.writeHead(200,{
   'content-type':'text/html;charset=utf-8'})//表示请求成功时设置能识别中文
	
	// end()响应请求		一个服务智能出现一个end,end后面的代码不执行
	response.end('<h1>hello world</h1>');//必须写end(),表示结束
	
	
	// listen监听端口号
}).listen(3000)//监听3000这个端口

设置响应请求头,并解决字符乱码

设置writeHead  响应请求头
参数一:http状态码   200 Ok
参数二:内容的类型
    text/plain 文本
    text/html  html标记语言(建议使用)
    text/json  json数据
    text/url-list url列表
response.writeHead(200,{
   'content-type':'text/html;charset=utf-8'})

response的方法

write() 写入数据到页面,可以重复使用,但不能放到end之后
end() 一个服务只能出现一次,且end后面的代码将不会被执行

4.1输出hello world例子

效果图

在这里插入图片描述

1.在node里面新建1.js文件
在这里插入图片描述

2.在1.js里面写下如下代码

// Node.js里面使用的是Common.js的语法	export导出	require导入
var http =require('http')
// console.log(http)

/* 
	创建服务
	request请求	response响应
 */
http.createServer(function(request,response){
   
	
	// writeHead设置响应请求头
	response.writeHead(200,{
   'content-type':'text/html;charset=utf-8'})//表示请求成功时设置能识别中文
	
	// end()响应请求		一个服务智能出现一个end,end后面的代码不执行
	response.end('<h1>hello world</h1>');//必须写end(),表示结束
	
	
	// listen监听端口号
}).listen(3000)//监听3000这个端口

console.log('server is running at localhost:3000')

3.cmd里面进入node,并且输入node 1.js
在这里插入图片描述
4.浏览器打开localhost:3000

五、node中的阻塞和非阻塞

5.1阻塞

效果图
在这里插入图片描述

// 阻塞读取

// 1.引入文件模块
var fs=require('fs')
// console.log(fs)

// 阻塞代码		同步读取文件
// 2.使用
var data=fs.readFileSync('葵花宝典.txt')

// 先执行
console.log(data.toString())

// 后执行
console.log('读取完成.....,拿到内容后才执行我')

5.2非阻塞

效果图
在这里插入图片描述

// 非阻塞读取

// 1.导入
var fs=require('fs')

/* 
	fs.readFile(path,callback)异步读取文件内容		
		data为异步读取的文件数据
		err为目录或路径写错
 */
// 2.使用
fs.readFile('葵花宝典.txt',function(err,data){
   
	if(err){
   
		console.log(err)
	}else{
   
		console.log(data.toString())//toString()	将数据流转为字符串
	}
})


console.log('我先执行')

六、事件循环

6.1介绍

Node.js 是单进程单线程应用程序,但是因为 V8 引擎提供的异步执行回调接口,通过这些接口可以处理大量的并发,所以性能非常高。
Node的所有API都支持回调函数
Node.js 基本上所有的事件机制都是用设计模式中观察者模式实现

事件的方法
on(event,listener) 为一个指定的事件注册监听器

emit(event,[arg1],[arg2],[arg3]...)按监听器的顺序执行执行每个监听器

addListener(event, listener)为指定事件添加一个监听器到监听器数组的尾部

once(event,listener)为指定事件添加一个单次监听器

removeListener(event,listener)移除指定事件的某一个监听器

removeAllListeners(event)移除指定事件所有的监听器

listeners(event)返回指定事件的监听器数组

listenerCount(emitter,event)返回指定事件当前监听器的数量
语法:events.EventEmitter.listenerCount(emitter,event)

setMaxListeners(n)设置最大的监听器个数  默认为10

超过事件监听器的个数则报错如下
在这里插入图片描述

事件方法的例子

addListener

var event=require('events')

var emitter=new event.EventEmitter();

function listener1(){
   
	console.log('事件监听器1')
}

function listener2(){
   
	console.log('事件监听器2')
}

function listener3(){
   
	console.log('事件监听器3')
}
// 监听事件 addListener(eventName,listener)
// on和addListener的区别:		on监听事件可以移除,addListener监听的事件可以移除,removeListener和removeAllListener移除事件监听
emitter.addListener('connect',listener1)
emitter.addListener('connect',listener2)

emitter.emit('connect')

在这里插入图片描述
listeners(eventName)返回事件的数组

console.log(emitter.listeners('connect'))//[ [Function: listener1], [Function: listener2] ]

在这里插入图片描述
listenerCount(实例化对象,eventName)

var listenerNum=event.EventEmitter.listenerCount(emitter,'connect');
console.log(`监听器的数量${
     listenerNum}`)//2

removeListener(eventName,监听器名字)移除指定的单个监听器

emitter.removeListener('connect',listener2)
console.log(emitter.listeners('connect'))

removeAllListeners(eventName)移除所有的监听器

emitter.removeAllListeners('connect')
console.log(emitter.listeners('connect'))

6.2使用步骤

1、引入事件模块

var events=require('events');

2、创建一个eventEmitter对象

var emitter = new events.EventEmitter();

3、监听事件

eventEmitter.on(eventName,handler) 绑定事件,为该事件分配一个观察者
eventName为自定义的事件名      handler为触发事件时,执行的函数

4、触发事件

eventEmitter.emit(eventName,arg1,arg2...) 触发指定的自定义事件

6.3例子

效果图
在这里插入图片描述

// 1.引入事件event模块
var events=require('events');

// 2.创建一个eventEmitter对象
var emitter = new events.EventEmitter();

/* 
	3.emitter.on(eventName,eventHandler)监听事件	
		eventName为自定义事件名
		回调函数里面的参数为触发事件里面的内容
 */
emitter.on('connect',function(a,b){
   
	console.log('服务器连接成功')
	console.log(a)
	console.log(b)
})


// 4.emitter.emit(eventName,arg1,arg2,....)触发事件		eventName后面可以传入自定义参数
setTimeout(function(){
   
	emitter.emit('connect','张三','李四')
},1000)

6.4例子二

效果图
在这里插入图片描述

/*
	总结:on的执行是由于emit发生才执行
 */

// 1.引入事件event模块
var events=require('events');

// 2.创建一个eventEmitter对象
var emitter = new events.EventEmitter();

/* 
	3.emitter.on(eventName,eventHandler)监听事件	
		eventName为自定义事件名
		回调函数里面的参数为触发事件里面的内容
		eventEmitter的每个事件允许传入若干个参数
 */
function listener1(){
   
	console.log('事件监听器1')
}

function listener2(){
   
	console.log('事件监听器2')
}

function listener3(){
   
	console.log('事件监听器3')
}

function listener4(){
   
	console.log('事件监听器4')
}



emitter.on('connect1',listener1)//事件监听器2
emitter.on('connect2',listener2)//事件监听器1


emitter.on('connect3',listener3)//事件监听器3
emitter.on('connect3',listener4)//事件监听器4



/* 
	注意:
		event事件的执行顺序跟其其触发的先后顺序有关
		event事件运行同一个事件名绑定多个监听器,且根据on的顺序依次触发
 */

emitter.emit('connect2')
emitter.emit('connect1')

emitter.emit('connect3')

七、模块

7.1介绍

模块系统的作用主要体现在Node.js的文件的相互调用。

模块系统是Node的基本组成部分,每一个Node.js文件则为一个模块

常见的模块:http、fs、events、url、queryString

7.2使用步骤

 1) 创建模块   导出的模块可以为函数、对象...
(2) 导出模块   exports   module.exports
(3) 引入模块   require(属于Common.js的语法)
(4) 使用模块

exports和module.exports的区别?
	exports是module.exports的抽象化代表,module.exports是exports的具体实现。

7.3例子

效果图
在这里插入图片描述

1.创建hello.js这个自定义模板和world.js
在这里插入图片描述

2.在world.js导入hello.js这个模板

在这里插入图片描述
在这里插入图片描述
调用对象里面的方法:

hello.hello()

7.4完整代码

hello.js

// 定义模块

function hello(){
   
	console.log('hello 你好呀')
}

// export.模块名	= 导出的内容
exports.hello = hello

world.js

// 导入自定义模块
var hello = require('./hello')

// console.log(hello)

hello.hello()

7.5自定义模块封装—实现学校有哪些班级

效果图
实现查询学校有哪些班级
在这里插入图片描述
1.文件目录
在这里插入图片描述

2.先写student.js

function add(studentName){
   
	console.log(`学生:${
     studentName}`)
}

// add('张三')
exports.add = add

测试一下
在这里插入图片描述
3.teacher.js

function add(teacherName){
   
	console.log(`老师:${
     teacherName}`)
}

// add('李四')
exports.add = add

测试一下
在这里插入图片描述
4.team.js

var student=require('./student')
var teacher=require('./teacher')

function add(obj){
   
	// console.log(`班级名:${obj.team}`)
	
	teacher.add(obj.teacher)
	console.log(`班级:${
     obj.teamName}`)
	
	for(var i=0;i<obj.students.length;i++){
   
		student.add(obj.students[i])
	}
	
	console.log('==========================')
}

// add({teamName:'前端',teacher:'吴老师',students:['鞠婧祎','诸绪丹','赵丽颖']})
exports.add =add;

测试一下
在这里插入图片描述
5.school.js

var team =require('./team')

function add(obj){
   
	console.log(`学校名:${
     obj.school}`)
	
	
	for(var i=0;i<obj.teams.length;i++){
   
		team.add(obj.teams[i])
	}
}

add(
	{
   
		school:'文理',
		teams:[
			{
   
				teamName:'前端1',
				teacher:'吴老师',
				students:['鞠婧祎','赵丽颖','诸绪丹']
			},
			{
   
				teamName:'前端2',
				teacher:'吴老师2',
				students:['鞠婧祎2','赵丽颖2','诸绪丹2']
			}
		]
	}
	
)

测试一下
在这里插入图片描述

7.6url模块

7.6.1介绍
var url=require('url')
console.log(url)

console.log(url)的结果
在这里插入图片描述

7.6.2使用步骤

1.引入url

var url=require('url')

2.使用url的方法

7.6.3例子

1.parse重点 将字符串转为对象

在这里插入图片描述

/* 
	// 2.使用parse
			*第一个参数写字符串
			*第二个参数表示query是否为对象:true->query变为对象	false->query变为字符串
			第三个参数是否需要识别无协议的网址,	true->需要识别		false->不需要识别
 */
 var url=require('url')
var
  • 15
    点赞
  • 83
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值