node.js

84 阅读9分钟

1、学习原因: 1、前端招聘要求 - 熟悉 或 了解一门服务器端语言者优先 2、对于我们前端来说,了解服务器端的机制,更好更快的进行前端开发 3、防止背锅

扩展:
	全栈工程师 - 客户端(PC+移动端+小程序+APP) + 服务器端(Node.js) + 数据库(mongoDB)
	技术类发展:
		全栈 - 涉及到多个领域,每个领域都会用,但是不必精通 -> 架构师 -> 项目经理 -> 技术总监(CTO)
		专家 - 某个领域是无敌,还会创造 - 比如:vue作者 - 尤雨溪
		弱技术类:运维/运营,有手就行
	销售类发展:
		产品 -> 产品经理 -> 产品总监(谈业务,是必须要懂技术的,了解用户的业务需求和业务逻辑,每一个业务都是要加钱的)
	教学类发展:
	创业类发展:不太推荐

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

			前端崛起的原因之一:三阶段你会学习混合开发框架:jQueryMobile/h5+plus/【uniapp】 - 只需要一个前端学一点点IOS/Andriod的语法就可以搞定了
			前端的崛起导致IOS/Andriod开发者大量的失业:千万不能啃老本

Node.js三天 + Ajax三天
	对于服务器端的掌握 - 入门
	最终目的:以后自学都没有什么问题(深入),并且我们要做出:登录+注册+修改密码+注销账号+增删改查
	小项目:图书管理系统,你要比我多做:咖啡管理系统!

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

	拥有服务器的方式:
		1、买 - 对中小型公司不友好
		2、买一台配置好一点的微机 - 对于别的行业的公司也不太划算
		3、租云服务器 - 腾讯云、阿里云、新浪云、百度云...配置咨询,配置越好,价格越高,按年收费,第一年往往很便宜

对于我们开发人员来说
	硬件服务器 - 人人都有一台电脑
	软件服务器 - 中间件(软件,可以见你的电脑变成一台服务器,人人都可以来访问你,就是我们要学习Node.js)

软件架构:服务器端很重要
	C/S架构 - Client客户端/Server服务器端
		举例:QQ、微信、大型网络游戏

		优点:
			1、用户体验感较好
			2、运行稳定
			3、对带宽的要求低
		缺点:
			1、占硬盘空间
			2、更新过于麻烦 - 服务器端和客户端都要更新

	B/S架构 - Browser浏览器端/Server服务器端
		举例:网页版QQ、网页版微信、网页游戏

		优点:
			1、几乎不占用硬盘
			2、更新简单 - 只需要更服务器端
			3、电脑在垃圾都可以玩得起!- 不吃配置,代码都在服务器那边运行
		缺陷:
			1、用户的体验感较差(越来越好,尤其是现在出现了云平台,根本不用考虑你的电脑好不好,配置如何)
			2、对于带宽的要求高(还好现在的网速越来越快的)。
		

3、Node.js概述:不是JS,但是语法和JavaScript非常相似,他的竞争对手:Java、C++、C#、python、PHP... 做的功能绝对不是做特效的!做的事和服务器端其他语言是一致(和数据库进行交互,成为了一个前端到数据库的中间桥梁) 目的: 1、使用代码搭建一个服务器&文件系统(服务器文件可以放在任何位置,但是不在你的电脑里,你也可以根据网址来访问我的东西) 2、Node.js如何沟通前端和数据库(增删改查) 3、全栈项目:图书管理系统(HTML+CSS+JS+NODE+MONGO)

4、Node.js安装:node-v18.15.0-x64.msi - 一路往下点,哪里点不动了,就把哪里勾上,千万不要取消任何东西 版本:16年初(0.12) 16年中(4.xx) 16年末(6.xx) - 更新速度快,意味着:发展迅猛,有前景,其实也没有多大的变化,更新的最多的是提升了底层性能 检查你安装成功没有:打开cmd输入:node -v 查看版本号,如果有版本号代表你已经安装成功了! 其实你安装的这个node.js就是一个运行环境而已!我们书写的“js”不再需要浏览器了,因为我们根本写的就是不js,而是node.js,只不过语法和js非常相似

5、Node.js如何运行:3种 1、交互模式 - 临时测试 打开cmd输入:node回车,你就可以开始敲你的“js”代码

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

3、编辑器越来越强大了,安装插件:前提:至少前两个方法能够成功,才可以安装插件
	vscode - 插件:code runner,对着代码处右键,第一个选项就是code runner,或者右上角有一个开始按钮可以点击,有的同学(输出会乱码,可以百度找解决方案)

6、Node.js知识: 1、js和node的区别 相同点:都可以使用一切的ECMAScript(那11个)的东西,包含一切的API,都可以使用,在服务器端不存在任何浏览器,所以不必担心兼容问题 不同点: 1、JavaScript:ES+BOM+DOM - 做特效的 2、Node.js:一切的BOM和DOM都没有,虽然没有BOM和DOM,但是他却又10万+个以上的模块等待我们学习

2、模块(module):每一个xx.js,都可以称之为是一个模块
	1、模块化开发:如果以一个网站来说,我们可以按功能分为很多模块:商家模块、商品模块、促销模块、用户模块、产品模块....
		分工合作:将每个模块交给对应的人完成,最后再由【主模块】进行引入:
		
		1、每一个模块都有一个操作,可以用于公开/暴露自己的成员
			Node.js自带一个预定义变量:exports,可以直接使用,是一个对象,放在此对象里面的东西,就是允许公开的东西
			语法:
				1exports.属性名=值;
				2module.exports.属性名=值;
				3module.exports={
					属性名:属性值,
					...
				      }

				错误导出法:
					exports={
						"name":"袍哥1",
						"age":18,
						hobby:"吃饭"
					};

		2、每一个模块(主模块)都有一个操作,可以用于引入/导入其他模块
			Node.js自带一个预定义变量:require,可以直接使用,是一个函数,放在此函数里面的路径,就是允许引入的模块文件
			语法:
				var x=require("./路径");

		面试笔试题:exportsmodule.exports有什么区别?
			1、语法、写法,用法不同
			2、都是用于公开暴露自己的成员的
				但是exports={},写法是错误的
				其实Node.js底层有一句话:exports={}
				其实真正做公开功能的是module.exports
				如果你使用了	            exports={};//你创建了一个新的空对象,把module.exports覆盖了,所以不再具有公开的功能	

	2、模块的分类:
		1、官方模块 - 今日的目标,大概有二十几个,但是重要的其实只有几个
		2、第三方模块 - 在npm上放着的,多到数不清楚,提供了很多官方没有的东西,明天我在学习,可以上传也可以去下载
		3、自定义模块

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

	3、官方模块:不需要下载,在你安装node.js环境的时候就已经带上了,但是某的模块需要引入,某的模块不需要引入
		1Global模块:不需要引入的,可以直接使用
			提供了:
				1、五个预定义变量,可以直接使用了
					1、__filename - 获取到当前文件完整的绝对路径
					2、*__dirname - 获取当前文件绝对路径,不包含文件的名字,何时:vscode的某些同学可能不支持node.js上书写相对路径,只能书写绝对路径,但是绝对路径全由自己写又很累,有了此变量我们可以直接拼接!- 【文件系统】!
					3、*exports - 空对象,可以用于公开暴露自己的成员
					4、*require - 函数,可以用于导入其他模块
					5、***module - 指代当前模块本身,甚至包含着以上4个操作
				2、定时器(周期性、一次性、瞬间定时器):定时器不是当初的定时器,只不过用法和当初一摸一样!
				3console也不是当初的console,只不过用法和当初一摸一样!

		2、querystring模块:解析查询字符串,使其变成一个对象,可以获取到前端传到后端的消息(前端传到后端的消息-请求消息)
			需要引入:var qs = require('querystring');
			作用:解析url中查询字符串部分的功能
			var obj=qs.parse("查询字符串");
			想要获得前端传来的每一个部分:obj.键名;
			垃圾:如果前端传来的是一个完整的url网址,他就解析不了

		3、***url模块 - 今日小重点
			需要引入:var url = require('url');
			作用:解析url中各个部分的功能
			var objUrl=url.parse("完整的url",true);//支持第二个参数,是一个布尔值,默认为false,一旦设置为true,就会自动使用querystring的parse方法去解析查询字符串部分
			***真正的重点:
				1、查询字符串/请求消息:objUrl.query.键名; - 前端form(GET)表单提交到后端的东西
				2、路由/文件相对路径/请求地址:objUrl.pathname - 判断路由的不同,去读取不同的HTML发送给我们的用户看!

		4Buffer模块:缓冲区,可以将数据变成一个16禁止的数字,你可以理解为是Node.js中的一种新的数据类型,但是我们绝对不会手动使用,因为我们一眼看不懂!
				但是后端的一些API可能会导致我们被动得到Buffer,但是你也别怕,因为Node.js中大部分API,都是支持Buffer

		5、*****fs模块 - 今日大重点:fileSystem文件系统
			需要引入:var fs = require('fs');
			*异步读取文件:
				fs.readFile(文件路径,(err,buf)=>{
					console.log(buf);->读取到了要干什么,必须放在这个回调函数里面!
				})

			异步写入文件:
				fs.writeFile(文件路径,"新内容"/buf,(err)=>{
					console.log("写入完毕后要做什么,必须放在里面")
				})//会替换掉原来的东西

			异步追加文件:
				fs.appendFile(文件路径,"新内容"/buf,(err)=>{
					console.log("写入完毕后要做什么,必须放在里面")
				})//不会替换掉原来的东西

			强调:只有异步才能更完美的发挥Node.js的特点(快)