Node.js day023

96 阅读5分钟

官方模块

1、buffer模块 - 缓冲区,本质是一块内存区域,用于暂存以后可能用到的数据(数字、字符串、二进制图片、视频、音频),该区域就称之为缓存

	不需要引入的直接使用
	//可以给想要的数据分配缓冲区,变成一个我们不认识的十六进制的一串数字
	var buf=Buffer.from("hello world");

	注意:buffer我们可以简单理解为是一个node.js新提供的数据类型,但不方便我们认识/看懂,此方法我们绝对不会手动使用,
	          但是node中的别的API可以执行了某个操作过后,就会返回我们一个buffer类型,也别怕,因为node中大部分API是支持直接使用buffer

2、fs模块 - 全称filesystem - 文件系统 - 小重点!

	fs模块提供了对象文件系统中的文件进行读写的功能
	需要引入:
	const fs = require('fs');

	//异步:不会卡住后续代码的,这块代码就算再耗时也无所谓,后续代码先跑了,我们慢慢做 - 异步才能发挥我们node.js的特点/优点
	//*读取文件:
		fs.readFile("文件路径",(err,buf)=>{
			buf - 就是你读取到的东西,只不过自动转为了buffer类型
		})
	
	//写入文件:
		fs.writeFile("文件路径","新内容"/buf,(err)=>{
			//用于你写入完毕后要做什么
		})
	
	//追加文件:
		fs.appendFile("文件路径","新内容"/buf,(err)=>{
			//用于你写入完毕后要做什么
		})

	注意:vscode的部分同学可能不能再此处书写相对路径,只能写绝对路径__dirname

3、http模块 - 代码搭建http服务器 - 大重点

	http:请求 - 响应模式,有请求才有响应,一个请求一个响应
	功能:
	1、可以接受前端发来的请求消息的
	2、解析前端发来的请求消息
	3、根据前端的需求我们回去去读请求到的文件,响应给他看

如何使用: 固定模块

//引入http、url、fs模块
var http=require("http");
var url=require("url");
var fs=require("fs");
//创建服务器应用
var app=http.createServer();
//设置服务器的监听端口号
app.listen(80);
//为服务器绑定请求监听事件 - request:请求,想要触发请求事件,那必须前端来发起请求,我们都没有接收到请求自然不会执行
app.on("request",(req,res)=>{
	//req - request:请求对象,有一个非常重要的属性,req.url可以得到前端传来的路由和请求消息!解析req.url,单独得到路由部分,通过判断前端的路由的不同的,做不同的响应
	var objUrl=url.parse(req.url,true);
	//单独获取路由部分
	var router=objUrl.pathname;
	//判断你的路由给你响应不同的内容
	if(router=="/index.html" || router=="/"){
		//res - response:响应对象,有一个非常重要的方法:res.end("后端想要给前端东西"),前端就不会一直转圈圈了
		fs.readFile("./public/html/index.html",(err,buf)=>{
			res.end(buf);
		})
	}else if(router.match(/html/)!=null){//响应其他的html
		fs.readFile("./public/html"+router,(err,buf)=>{
			res.end(buf);
		})
	}else if(router.match(/css|js|jpg|png|gif|woff|woff2|ttf/)!=null){//响应其他的资源
		fs.readFile("./public"+router,(err,buf)=>{
			res.end(buf);
		})
	}
})

特殊:
1、有的同学,可能写不了相对路径,必须书写绝对路径	
2、一旦搭配服务器端不允许出现中文路径
3、以后会有更多的路由可能是跟数据库挂钩的

1、自定义模块:两种形式

学了这个你就知道为什么有的模块要加./引入,有的模块不用加./引入
1、*文件模块
	创建一个xx.js,导出需要公开的数据,主模块想要引入必须写为require("./文件路径")

2、目录模块
	方式1:创建一个文件夹,名为m1,其中再创建一个名为index.js的文件导出需要公开的数据,主模块想要引入必须写为require("./文件夹路径")
	方式2:创建一个文件夹,名为m2,其中再创建一个名为xx.js的文件导出需要公开的数据,但是需要再创建一个必须名为package.json的配置文件写入:{"main":"xx.js"},主模块想要引入必须写为require("./文件夹路径")
	*方式3:创建一个文件夹,必须名为node_modules,再在其中创建一个文件夹:名为m3,其中再创建一个名为index.js的文件导出需要公开的数据,主模块想要引入必须写为require("m3")
	第三种方式看上去最屌,但是操作起来最麻烦,而且这个玩意儿根本不是给人用的,给机器自动生成的,理论上来说我们正式开发自己会使用的是文件模块

2、NPM:Node Package Manager:Node.js的第三方模块包/模块管理器:可用于下载、更新、删除、维护包的依赖关系

npm不需要下载安装,再你安装node.js的时候就已经安装好了
检查一下是否有npm:打开cmd:输入npm -v 如果有版本号出现说明你电脑里已经有了npm
打开npm官网:www.npmjs.org,搜索我想要的模块
下载:npm i 包名;
更新:npm up 包名;
删除:npm un 报名;

毕竟npm是国外的,下载速度可能很慢,你希望快一点可以先安装一个cnpm:
	npm install cnpm -g --registry=https://registry.npmmirror.com

3、数据库:很多很多的跟网页/网站/软件/小程序挂钩的数据(新闻、产品、用户...)

关系型数据库:以表格形式为主
	Oracle - Oracle公司(甲骨文)
		适用于【企业级】开发市场:大公司、国企、事业单位(医院、警察局)。安全性极高

	MySQL - Oracle公司(甲骨文)
		适用于【互联网】开发市场:中小型公司、免费!

	SQLServer - 微软:大学讲课

非关系型数据库 - 没有固定格式,是一种运动,反关系型数据库
	mongoDB - 以JSON格式为主 - 免费!

吹牛逼:
	MySQL/mongoDB一经退出立刻爆火
	原因:免费 开源 简单
	最初使用MySQL AB软点化公司推出,后来被收购sun公司,再后来sun公司又被oracle收购了
		oracle
		mysql - 社区版(免费)和 商业版(收费)
		java