二阶段第五周JS知识点整理

105 阅读21分钟

Monday

BOM:Browser Object Model - 浏览器对象模型,专门操作浏览器,没有标准,不像DOM有ECMA协会规范标准,所有某的浏览器操作可能和别人不一样(老IE),BOM使用的相对较少,当然也有重点(定时器、event对象)

1、window:扮演着两个角色:

1、代替了global,成为了全局对象,保存着全局变量和全局函数
2、指代当前窗口本身 - 展开一些操作:

	1、浏览器打开新链接的各种方式:
		1、在当前页面打开,可以后退
			HTML:<a href="url">文字</a>
			     JSopen("url","_self");

		2、在当前页面打开,禁止后退 - 使用场景:比如电商项目:结账后,禁止后退
			HTML:做不到
			history对象:BOM对象,当前窗口的历史记录url对象,记录着当前窗口的历史(打开【过】的urllocation对象:BOM对象,当前窗口的正在打开的url对象,而它提供了一个叫替换的方法,是不会产生历史记录的,但是url替换必然也会导致页面发生改变,有此特性可以搞定此操作
			JSlocation.replace("新url");

		3、在新窗口打开,可以打开多个
			HTML:<a href="url" target="_blank">文字</a>
			     JSopen("url","_blank");

		4、在新窗口打开,只能打开一个 - 使用场景:比如电商项目:只允许打开一个结账页面
			HTML:<a href="url" target="自定义name">文字</a>
			     JSopen("url","自定义name");

			自定义name:随便的写一个东西,每个窗口的底层都会有一个名字,打开时,
				       如果没有此名字的窗口则为打开,如果有此名字的窗口则为替换(刷新)

		学完此操作:收获:
			1、跳转不是必须a标签
			2、用不用看你自己,用好了能够提升用户的体验感
			3a标签其实还有些其他功能:
				下载:<a href="xx.exe/rar/zip">下载</a>
				打开:<a href="xx.txt/图片格式">打开</a>
				直接书写js:<a href="javascript:js语句;">不用绑事件</a>

	2window的方法和属性:
		1、属性:获取屏幕/浏览器的大小:
			1、获取浏览器的完整大小:outerWidth/outerHeight
			2、*获取浏览器的文档显示区域的大小:innerWidth/innerHeight
			3、获取屏幕的大小:screen.width/height - 一般来说没用,我们暂时不是做桌面应用的

		2、方法:
			1、打开窗口:var 新窗口=open("url","target/自定义","width=,height=,top=,left=");
				特殊:1、第三个参数,如果不加,那么新窗口会和浏览器融为一体,但是如果加了第三个参数,小窗口会脱离浏览器
				          2、宽高尽量不要设置的太小了,浏览器具有最小宽高,不能超过
				          3、保存住你打开的新窗口,甚至以后可以绑定事件
			2、关闭窗口:window/新窗口.close(); - 垃圾
			3、移动窗口的位置:新窗口.moveTo(newX,newY); - 注意此方法只有新窗口可以使用
			4、改变窗口的大小:新窗口.resizeTo(new宽,new高); - 注意此方法只有新窗口可以使用
			5、定时器:根据你提供的时间间隔,执行操作
				1、周期性:反复执行的
					开启:timer=setInterval(callback,间隔毫秒数);
					停止:clearInterval(timer);

				2、一次性:只会执行一次
					开启:timer=setTimeout(callback,间隔毫秒数);
					停止:clearTimeout(timer);
				
				其实用哪个都无所谓,因为他们底层一样,而且两者也可以相互转换

面试题:循环、函数、定时器都可以反复执行,那他们的区别在哪里?时机不同

  1、循环 - 几乎是一瞬间就完成了
  2、函数 - 调用几次执行几次
  3、定时器 - 等待设置的时间

Tuesday

1、BOM的其他的对象:history、navigator、location、event,BOM的对象都由浏览器的js解释器自动创建

2、history:保存当前窗口的历史记录(打开【过】的url),可用于:

前进:history.go(1); 后退:history.go(-1); 刷新:history.go(0); 浏览器现在自带此功能

3、navigator:保存着当前浏览器的基本信息(浏览器的名称和版本号)

如何判断:navigator.userAgent; - 得到一个字符串,上面放着我们需要的部分,但是每个浏览器的字符串都不一样,需要获取关键字,但是要考虑怎么截取更舒服

明明可以单独为老IE做操作,为什么会说他没什么用?
	1、前辈们往往为我们提供了老IE兼容的方法
	2、现在的趋势是移动端,所以PC的开发慢慢的变得少了
	3、移动端不存在老IE,只有安卓(谷歌)和 苹果(safari)

4、***location:保存着当前窗口【正在打开】的url

***常识:一个url网址由哪些部分组成?
https://www.baidu.com/s?wd=%E5%95%A6%E5%95%A6%E5%95%A6&rsv_spt=1&rsv_iqid=0xc1ed57da00129754&issp=1&f=8&rsv_bp=1&rsv_idx=2&ie=utf-8&tn=44004473_20_oem_dg&rsv_enter=1&rsv_dl=tb&rsv_sug3=6&rsv_sug1=3&rsv_sug7=100&rsv_sug2=0&rsv_btype=i&inputT=2176&rsv_sug4=2176
http://127.0.0.1:8020/bom02/new/01-1.html?__hbt=1675130294579

一共5部分 
	协议:https(加密 - 安全性更好)、http(未加密)、ftp、ws(直播、在线聊天、在线股票)
	主机号/域名:其实是同一个东西,只不过域名需要花钱购买,而且域名更好更方便记忆,本地自己访问自己,主机号默认为127.0.0.1
	端口号:https默认端口号为443,http默认端口为80,只有使用默认端口,才可以省略不写
	文件的相对路径:只不过百度加密了,不让我们看到
	路由/查询字符串/请求消息:多半都是get表单提交带来的或者是ajax提交带来,是前端发送到后端的消息,后端可以根据我们发送的消息进行解析,并且返回给我们需要的内容

	协议://域名:端口号/文件相对路径?路由

注意:vscode - xxxx default打开网页是本地打开方式,看不到服务器网站,你可以下载一个插件live server,右键用此方式打开就可以用到vscode自带的内置服务器

*属性:可以获取到url的任何一部分
	协议:location.protocol;
	域名:location.hostname;
	端口号:location.port;
	文件路径:location.pathname;
	路由:location.search
	哪怕不记得,没关系,一定要学会输出location对象可以直接看到所有属性	

*方法:
	跳转:location="新url"
	跳转后,禁止后退:location.replace("新url");

5、*****event:事件对象

事件:用户触发的 或 浏览器自动触发
1、绑定事件:3种
	1、在HTML页面上绑定事件:
		<elem on事件名="js语句"></elem>

		全是缺点:
			1、不符合内容(HTML)与样式(CSS)与行为(JS)的分离原则
			2、无法动态绑定事件(一次只能绑定一个元素)
			3、无法同时绑定多个函数对象

	2、*在js中使用元素的事件处理函数属性
		elem.on事件名=function(){js语句}

		优点:
			1、符合内容(HTML)与样式(CSS)与行为(JS)的分离原则
			2、动态绑定事件
			3、不存在兼容性问题
	
		缺点:
			1、无法同时绑定多个函数对象

	3、使用专门的事件API绑定事件
		优点:
			1、符合内容(HTML)与样式(CSS)与行为(JS)的分离原则
			2、动态绑定事件
			3、同时绑定多个函数对象

		缺点:
			存在兼容性问题 - 而且写起来很麻烦
		主流:elem.addEventListener("事件名",callback);
		老IE:elem.attachEvent("on事件名",callback);
		兼容:
			if(elem.addEventListener){//判断有没有此方法
				elem.addEventListener("事件名",callback);
			}else{//没有此方法,一定是老IE
				elem.attachEvent("on事件名",callback);
			}

2、事件周期:从事件发生,到所有事件函数处理完毕的全过程
	3个阶段:
	1、捕获阶段:由外向内,记录着要发生的事件有哪些
	2、目标优先触发:目标元素->真正触发事件的是元素,和当前元素this有一些区别
	3、冒泡触发:由内向外,触发记录着的所有事件

3、获取事件对象event:
	主流:会自动作为事件处理函数的第一个形参传入
		elem.on事件名=e=>{}
	老IE:event
	兼容:var e=event;//不光老IE可用,主流也可以使用 - 小三上位

	*****获取到事件对象,我们可以干什么?
		1、获取鼠标的位置/坐标

		2、阻止冒泡 - 其实冒泡非常棒!我们几乎不会主动去阻止冒泡,阻止冒泡一般都出现在笔试面试之中
			主流:e.stopPropagation();
			老IE:e.cancelBubble=true;
			兼容:e.cancelBubble=true;//不光老IE可用,主流也可以使用 - 小三上位

		3、*利用冒泡/事件委托:
			优化:如果多个子元素定义了相同 或 相似的操作,最好只给父元素定义一次
			为什么:每一次绑定一个事件函数,其实就是创建了一个事件对象,创建的事件对象越多,网站的性能越低下
			淘汰了this:水性杨花,当前元素
			认识一个目标元素target:你点击的哪一个,他永远就是哪一个,不会变化
			主流:e.target;
			老IE:e.srcElement;
			兼容:e.srcElement;//不光老IE可用,主流也可以使用 - 小三上位

		4、阻止浏览器的默认行为:a标签默认会跳转,右键自带一个弹出框,F12打开控制台,F5会刷新,提交按钮会提交
			主流:e.preventDefault();
			老IE:e.returnValue=false;
			兼容:
				if(e.preventDefault){
					e.preventDefault();
				}else{
					e.returnValue=false;
				}

			扩展:2个事件
				1、鼠标右键:oncontextmenu
				2、键盘按下:onkeydown

		5、获取键盘的键码
			e.keyCode; - 不要记忆,要么输出看看你当前点击的那个按钮是什么码,要么去百度找keyCode表

扩展:客户端存储技术:

1、cookie:淘汰了,使用很麻烦 - 最大只能传2kb
2、请求消息部分/查询字符串部分/路由 - 也可以存储,但是不适合多页面传输
3、***webStorage:HTML5(综合性概念)提出来的一个新特性:2种
	1、sessionStorage - 会话级,只要浏览器一旦关闭,数据就会死亡
	2、localStorage - 本地级,永久存在的
		1、添加:xxxxStorage.属性名=值;
		2、获取:xxxxStorage.属性名;
		3、删除:xxxxStorage.removeItem("属性名"); - 只会删除一个
		4、清空:xxxxStorage.clear(); - 删除全部

Wednesday

1、Nodejs学习原因:

1、前端招聘要求 - 熟悉 或 了解一门服务器端技术者优先
2、对于我们前端来说,了解服务器端的机制,更好更快的进行前端开发

扩展:

全栈工程师 - 客户端(PC+移动端+小程序)+ 服务器端(Node.js) + 数据库(mongoDB)
技术类发展:
	全栈 - 涉及到多个领域,每个领域都会用,但是不必精通 -> 架构师 -> 项目经理 -> 技术总监
	专家 - 某个领域顶尖的,甚至可以自己创建
销售类发展:
	产品 -> 产品经理 -> 产品总监
教育类:
创业类:不太推荐

可能成为全栈的语言:
	1、Java语言 - 不包含移动端(安卓)
	2、JavaScript语言
		客户端 - 开发根本
		服务器端 - Node.js 历史上第一次一门语言可以通吃前后端
		数据库 - mongoDB
		移动端 - 网页/app/小程序/公众号(跨所有平台IOS+Andriod)

		混合开发框架:uniapp/h5+plus/jqueryMobile - 只需要一个前端,学习一点点ios和andriod的语法就可以搞定

server+ajax:6天
对服务器端的掌握 - 入门
最终目的:登录 + 注册 + 全站一条龙:增删改查
小项目:图书/金夫人/咖啡管理系统

2、基本内容

服务器端概念:
	简单来说就是一个电脑
	生活中:微型机
	商业/国家:小型机(造价大概几十万,好的上百万)、中型机、大型机、超级计算机

	拥有服务器的方式:
		1、买 - 对中小型公司遭不住
		2、买一台配置好一点的微机 - 别的行业的公司还是不错
		3、租云服务器端 - 腾讯云/阿里云/百度云/新浪云... - 配置自选的,价格越高,性能越好

对于开发人员来说
	硬件服务器 - 电脑
	软件服务器 - 中间件(软件可以将你的电脑变成一台服务器,其他人都可以过来访问)

软件架构:服务器很重要
	C/S - client(客户端)/server(服务器端)
		举例:QQ
		          大型网络游戏
		优点:用户的体验感较好、运行稳定、对带宽2mb的要求低
		缺点:1、占硬盘空间  2、更新过于麻烦 - 服务器端和客户端都要更新
			
	B/S - browser(浏览器端)/server(服务器端)
		举例:网页版QQ
		          网页游戏
		优点:1、几乎不占硬盘,更新简单 - 只需要更新服务器端
		           2、电脑再差也无所谓
		缺点:1、体验感相对较差(越来越好)- 云游戏
		           2、对带宽的要求高

3、Node.js概述:

    不是JS,但是语法和JavaScript非常相似,他的竞争对手JAVA、C#、Python、PHP等等,历史上第一次一门语言可以通吃前后端
做的功能绝对不是特效,做的事是服务器端的操作(形成了一个前端和数据库沟通的桥梁 - 数据交互)
目的:
	1、使用代码搭建一个服务器&文件系统(放在代老师电脑上的HTML,你们也可以通过网址来进行访问)
	2、Node.js如何和数据库进行沟通交流(在这之前我们还需要学习mongoDB)
	3、全栈一条龙开发:图书管理系统(HTML+CSS+JS+NODE.JS+MONGODB)

4、Node.js安装:

node-v16.17.0-x64.msi - 一路往下点,哪里点不动了,就把哪里勾上,千万不要取消任何东西
版本:16年初(0.12)     16年中(4.xx)    16年底(6.xx) - 更新速度快,意味着:发展迅速,但是也没加什么新东西
检查自己安装成功没有:打开cmd,输入node -v,如果你能看得到版本号,说明你的node.js安装成功了
其实我们安装的这个node.js就是一个运行环境而已,不再需要浏览器自带的js解释器,node.js的语法和javascript非常相似

5、Node.js如何运行

1、交互模式 - 临时测试
	打开cmd,输入node回车,就可以开始瞧你的“js”代码了
	退出:ctrl+c

2、脚本/文件模式 - 正式开发中,丑了点
	1、创建xx.js,里面书写自己的代码
	2、打开cmd,输入:node 文件的绝对路径 然后回车

3、现在我们的开发工具非常强大,有插件可以直接在开发工具中运行,前提是以上两个操作你能用的情况
	vscode:安装一个插件:code runner,代码处可以右键,第一个选项就是run

6、node.js的知识点:

1、js和node的区别:
	相同点:都可以使用一切的ECMAScript提供的东西,放心大胆用,服务器端根本不存在浏览器,所以不必担心兼容问题
	不同点:1、javascript:ES+DOM+BOM - 做一切的特效
	              2Node.js:虽然不支持DOMBOM(不是做特效的,是做数据交互的),但是他却提供了成千上万个新的模块等待我们学习

2、模块:每个.js文件都可以称之为是一个模块
	1、模块化开发方式:如果以一个电商网站来说,我们可以按功能分为很多模块:商家模块、商品模块、产品模块、促销模块....
		分工合作:将每个模块交给对应的人完成,最后再由【主模块】进行引入
		1、每一个模块都i有一个操作,可与公开/暴露自己的成员:
			exports.属性名=属性值;
			module.exports={
				属性名:属性值,
				...
			}

			两种方式都可以公开

		2、每一个模块都有一个操作,可以引入其他的模块
			var xxx=require("./文件名")

		鄙视体:exportsmodule.exports的区别?
			都是用于公开暴露自己的成员的
			但是:exports={},写法是错误的,为什么?
			node.js底层有一句话:exports=module.exports
			其实真正做公开功能的是module.exports
			如果你使用	    exports={},覆盖了module.exports,不在具有公开的功能了

3、模块的分类:
	1、官方模块 - 今/明天学习的重点,大概20几个,重要的就只有几个
	2、第三方模块 - 多到数不清,提供了很多官方没有提供过的东西,在npm上放着,需要自行下载(mongoose)
	3、自定义模块

	Node.js最大的特点:
		1、非常快 - 以前最快的是php,Node.js的速度是php的162、为什么这么快?
			1、因为官方模块提供的东西少,甚至连数据库操作都没有
			2、使用google浏览器的v8引擎

4、官方模块:不需要下载,在你安装node环境的时候就已经装好,但是某的模块需要引入(官方模块引入不需要加./),某的模块不需要引入,跟我一起学习
	1Global模块:全局模块 - 提供了一些全局变量,是不需要引入的,可以直接使用
		一共提供了5个预定义变量:
			__filename:当前文件的完整的绝对路径
			*__dirname:当前文件的绝对路径,但是不包含文件名称,对你们某些使用vscode的同学有用
			*exports:一个空对象,公开和暴露自己的成员
			*require:一个函数,引入其他模块的
			*module:指代当前模块本身,包含了其他4个变量
			控制台对象console - 现在的console不再是当初的console,只不过用法和当初还是一样的
			定时器对象:周期性和一次性和瞬间定时器 - 现在定时器不再是当初的定时器,只不过用法和当初还是一样的

	2QueryString模块:查询字符串
		需要引入:var qs = require('querystring');
		提供了解析url的查询字符串部分的功能
		var obj=qs.parse("查询字符串");
		想要获取到前端传来的某一部分:obj.键名;
		垃圾:只能解析查询字符串部分,如果前端传来的是一个完整的url网址,那么它就解析不了了

	3、***url模块:解析完整的url - 今日小重点
		需要引入:var url = require('url');
		提供了解析完整的url的方法:
			var objUrl=url.parse("完整的url",true);//如果传入了第二个实参true,则会悄悄的调用querystring模块的parse方法,把查询字符串也解析为一个对象
		真正的重点:21、查询字符串:objUrl.query.键名 - 拿到前端传到后端的东西
			2、路由:objUrl.pathname - 判断路由的不同,响应给用户不同的页面看

	4Buffer模板:缓冲区,可以将数据变为一个16禁止的数字,可以理解为是Node.js中新提供的一个数据结构
		我们绝对不要手动使用此操作,但是Node.js中的某些API会让我们自动得到一个buf,但是不用担心
		Node.js大部分的API都是支持buf的

	5、*****fs模块:filesystem - 文件系统 - 今日大重点
		需要引入:const fs = require('fs');
		提供了可以操作文件的API

		异步读取:fs.readFile("文件的路径",(err,buf)=>{
				buf-读取到的内容
			 })

		异步写入:fs.writeFile("文件的路径","新内容",()=>{
				//写入完毕后要干什么操作就放在这里
			  })

		异步追加:fs.appendFile("文件的路径","新内容",()=>{
				//写入完毕后要干什么操作就放在这里
			  })

		异步才能最大的发挥node.js的特点:快!

Thursday

1、官方模块

6、http模块 - 超级重点:搭建http服务器的
1、引入
var http=require("http");
var url=require("url");
var fs=require("fs");
2、根据提供的API创建服务器应用
var app=http.createServer();
3、为其设置监听的端口号
app.listen(80);
4、设置监听请求事件,http模式:请求-响应模式,一定要有请求,才会有响应,前端发的叫请求,后端回答的才叫响应
app.on("request",(req,res)=>{
//req:request,请求,前端发的才叫请求,而,这个req对象,会有一个属性叫做req.url,就可以得到前端传来的路由&请求消息,我们希望把路由和请求消息区分开,所以需要搭配另一个url模块
var objUrl=url.parse(req.url,true);
var router=objUrl.pathname;
if(router=="/" || router=="/index.html"){
	//应根据判断路由的不同,响应不同的页面,给用户看,需要用到另一个模块fs
	fs.readFile("./public/html/index.html",(err,buf)=>{
		//res:response,响应,后端回答的才叫响应,而,这个res对象,会有一个方法叫做req.end(str/buf);可以进行响应
		res.end(buf)
	})
}else if(router.match(/html/)!=null){
	fs.readFile("./public/html"+router,(err,buf)=>{
		//res:response,响应,后端回答的才叫响应,而,这个res对象,会有一个方法叫做req.end(str/buf);可以进行响应
		res.end(buf)
	})
}else if(router.match(/css|js|png|gif|jpg|woff|woff2|webp|jpeg/)!=null){
	fs.readFile("./public"+router,(err,buf)=>{
		//res:response,响应,后端回答的才叫响应,而,这个res对象,会有一个方法叫做req.end(str/buf);可以进行响应
		res.end(buf)
	})
}
})
  把一切的src、href、引入的东西,都会当作是一个请求

2、自定义模块:自己的书写的js:var xx=require("./模块名");
分为2大种操作方式:
	1、文件模块:创建xx.js去公开自己想要公开的内容,主模块引入时必须:var xx=require("./模块名");

	2、目录模块:3种
		1、比如创建m1文件夹,在其中创建index.js的文件,再在里面去公开自己想要公开的内容,主模块引入时必须:var xx=require("./m1");
		2、比如创建m2文件夹,在其中创建xx.js的文件,再在里面去公开自己想要公开的内容,主模块引入时必须:var xx=require("./m2");
			必须再创建一个名为package.json的配置文件,里面书写一句话:{"main":"xx.js"}
		3、创建一个文件夹必须名为node_modules,在其中创建m3文件夹,在其中创建index.js的文件,再在里面去公开自己想要公开的内容,主模块引入时必须:var xx=require("m3");
			
		其实真实开发中,我们程序员用的最多的就是文件模块,目录模块的第三种方式其实根本不是给人用的(机器用的:第三方npm包管理器,下载的东西会自动创建出此文件夹)

3、如何去使用第三方模块:npm:Node Package Manager:Node的模块/包/软件管理器,其实在你安装node.js环境时已经安装好了
检查你安装好npm没得:打开cmd,输入npm -v,如果能看到版本号说明已经安装成功了
专门管理第三方模块:作用:
	1、*下载:npm i 包名;
	2、卸载:npm un 包名;
	3、更新:npm up 包名;
	维护着包之间的依赖关系

记得打开cmd,要在自己的项目路径打开

可以打开npm官网,查看你需要下载包,知道包名后,就可以做上面的三个操作了

Friday

mongoDB:数据库产品有很多(Oracle、MySQL),Mongo只是其中之一,搭配Node.js更合适,存储着很多很多跟我们项目挂钩的数据

1、安装&启动mongoose:

1、解压代老师发给你mongodb-win32-x86_64-2008plus-ssl-3.6.11.zip
2、我们得到的文件夹进入bin文件夹里面有:mongo.exe(客户端) 和 mongod.exe(服务器端)
3、如何启动:
	当前文件夹处,打开cmd:输入:.\mongod.exe --dbname=你想要保存的绝对路径地址    回车 - mongo服务器启动成功
	不要关闭此命令行cmd
	再打开一个cmd:输入:.\mongo.exe - 开启mongo客户端,再看看上一个命令行是否连接成功

2、mongo语法:

1、数据库操作:
	1、查询数据库:show dbs
	2、*创建/切换数据库:use 数据库名称;//居然查看不到,一定要在创建数据表后,我们才能看到自己创建的Mongo数据库
	3、查看当前选中的数据库:db;
	4、*创建数据表:db.createCollection("表名");
	5、删除数据库:db.dropDatabase();

2、数据表操作:
	1、*创建数据表:db.createCollection("表名",{size: 5242880,capped:true,max:5000});//最大空间为5mb,最多存储5000个,意味着你加了第二个实参,会导致限制用户操作,不推荐
	2、*查看目前所有的数据表:db.getCollectionNames();
	3、删除数据表:db.表名.drop()

3、*****数据操作:
	1、增:db.表名.save({键值对,...}) - 一次只能插入一条数据
	             db.表名.save({},{},{},{},...) - 一次插入多条数据(不推荐:注册本来就是一次创建一个账号)

	2、删:db.表名.remove({}) - 会删除所有数据的
	            db.表名.remove({pwd:"666666"}) - 会根据我们传入的条件,删除密码为666666的这个数据(注销账号)

	3、改:db.表名.update({name:"袍哥"},{$set:{pwd:"999999"}})
		找到名字叫袍哥,修改pwd为999999

	4、*查:  db.表名.find({}) - 所有
		db.表名.find({age:25}) - 找到所有年龄为25岁的
		db.表名.find({age:{$gte:18}}) - 找到所有年龄大于等于18的
		db.表名.find({pwd:/6/}) - 甚至可以写正则模糊查询
		db.表名.find({},{name:1,pwd:1}) - 只需要获取到所有人的名字和密码
		db.表名.find().sort({age:1}) - 根据age进行升序排列,如果age:-1,则为降序排列
		db.表名.find().skip(5).limit(5) - 跳过前5条,再拿5条,可以理解为6-10
		db.表名.find().count(); - 获取到此表有多少条数据

3、安装mongodb-compass-1.33.1-win32-x64:此为mongo数据库的图形化界面,比cmd好看多了,最大的作用就是为了方便我们看!


4、Node.js操作mongoDB

1、使用npm安装mongoose第三方模块

2、使用步骤:
	1、引入:var mongoose = require('mongoose');
	2、连接数据库:mongoose.connect("mongodb://127.0.0.1/数据库名称");
	3、创建出一个新的数据表的同时,设置数据类型的控制,防止用户乱输:
		var  userSchema=mongoose.Schema({
			name: String,
			age: Number,
			pwd: String,
			email: String,
			vip: String
		})
		//	                              自定义                      选中了你想要操作的某个数据表 
		var User=mongoose.model("User",userSchema,"数据表名")

	4、增:
		var x=new User({
			name: "李红慧",//
			age: 18,
			pwd: "123456",
			email: "lhh@qq.com",
			vip: 1
		})
		x.save((err)=>{
			console.log("新增完毕要做什么,就在这里做")
		})

	5、删:
		User.remove/【deleteOne】/deleteMany({条件},(err)=>{
			console.log("删除完毕要做什么,就在这里做")
		})

	6、改:
		User.update/【updateOne】/updateMany({条件},{新内容},(err)=>{
			console.log("修改完毕要做什么,就在这里做")
		})

	7、查:
		User.find({条件},(err,result)=>{
			result;//返回的结果,是我们的最爱JSON格式
		})