Node.js day022

125 阅读7分钟

学习的原因

学习的原因:
	1、web前端招聘要求 - 熟悉或了解一门服务器端技术者优先(node.js)
	2、熟悉服务器端机制 和 流程后,更好提高前端的开发(防止背锅)

扩展:
	技术类型发展方式
		全栈 - 客户端(PC+移动端)+ 服务器端 + 数据库,设置到多个领域,每个领域都不精通,但是会用,不会创造(你会就行,不用做,工资够高就可以)
		专家 - 在某一个领域最屌的
		管理 - 项目经理、技术总监
		销售 - 产品:出去和别人谈生意,需要知道业务逻辑/流程
		创业 - 不推荐
		教育

	可能成为全栈的语言
		java - 不包含移动端
		JavaScript语言
			客户端 - 开发根本
			服务器端 - node.js历史上第一次出现一门语言可以通吃前后端
			数据库 - mongoDB非关系型数据库中最火的一个,mysql,oracle关系型数据库
			移动端 - 跨所有平台的(andriod+ios),你只需要学习一点点ios和andriod的语法即可完成(三阶段混合开发框架uniapp)

全栈课程:Node.js2天 + mongoDB1天 + ajax3天 + Node.js框架(express框架)
	最终目的:登录+注册+注销账号+修改密码+全栈一条龙

基本内容:
	服务器概念
		简单来说就是一台PC机
		生活中使用的是 微机
		商业中使用 小型机(ibm和联想:大概造价在几十万,好的上百万)、中型机、大型机、超级计算机(国家:天河一、二号,神威太湖之光)

	我们如何才能获得一个服务器呢?
		1、硬买一台 - 中小型公司难以承受
		2、租一台 - 新浪/阿里/腾讯/百度云...租服务器,按年/月,根据你选择的配置不同价格也不同
		3、买二手货 - 一万块左右就能搞定
		4、配置一台性能好一点的微机 - 同时访问量过大,可能就会down机了

	对于开发人员
		硬件服务器 - PC机
		软件服务器 - 中间件(软件将我们普通电脑变为一个服务器node.js)

	应用架构
		C/S - client客户端/server服务器端
			举例:
				QQ、微信、微博
				大型网游
			优点:
				1、用户体验感好
				2、运行稳定的
				3、对带宽的要求低
			缺点:
				1、占硬盘空间
				2、更新过于复杂 - 服务器端要更新,客户端还要更新

		B/S - browser浏览器端/server服务器端
			举例:
				网页QQ、微信、微博
				网页游戏
			优点:
				1、更新容易 - 服务器端更新
				2、不占硬盘空间
				3、不看你的电脑配置
			缺点:
				体验相对较差(越来越好)
				对带宽的要求高(我们现在的网速越来越快了)

1、Node.js概述:

Node.js不是JS,但是和JavaScript的语法非常相似,是一种服务器端技术,他的竞争对手PHP/JAVA/C++/C#/PYTHON - 历史上第一次一门语言可以通吃前后端 - 前端崛起原因之一
	很像:但是做的事儿不一样
		JS:做特效
		Node:前端 <=桥梁(服务器端)=>数据库的
	版本:16年初(0.1216年中(4.x)	16年底(6.x)	22年底(19.x)
	意味着:行业有发展,正在发展中,现在确实不算牛逼,缺乏一个超级大框架。其实每次都没更新啥
	目的:1、通过node.js书写代码来搭建一个私网服务器,让我们局域网内的人员可以来进行访问 - 免费
	           2、搭配上数据库玩全栈
	下载安装:LTS长效稳定版 - 双击node-v18.12.1-x64.msi,一直点下一步,不要取消任何东西,就装C盘
	检查自己是否安装成功:打开cmd输入node -v回车如果你能看到版本号则安装成功

2、如何运行node.js

如何运行node.js - 我们安装的node.js其实是一个运行环境,可以让我们的js脱离浏览器运行,但其实已经不是javascript
    
1、交互模式:- 用于临时测试
		打开cmd输入node回车,就可以开始敲你的"js"语句
		输入一行执行一行

	
2、脚本模式 - 开发常用方式
		建一个xx.js文件,里面书写您的"js"代码 ,
		打开cmd输入node  完整的文件绝对路径,回车

	
3、随着编辑器慢慢的强大,我们编辑器有了插件:
		前提:cmd可用,才能安装插件
		1、HBuilder:node eclipse - 安装好了重启HBuilder,然后对着文件代码处右键运行
		2、VSCode:code runner - 安装好了重启VSCode,然后对着文件代码处右键第一个选项就可以运行,或者 右上有个开始按钮

	我们写的不是JavaScript只是和JavaScript长得很相似的Node.js

3、JavaScript和Node.js区别:

1、JavaScript:ES+DOM+BOM
	2、Node:ES一切东西都可用,但是没有DOM和BOM,意味着他不是做特效,很成百上千上万个【模块】等待我们学习

modal - 模态框/半透明遮罩层
model - 模型/数据
module - 模块

4、Node.js特有概念 - 模块

一个web项目功能可以分为很多个不同的模块,比如商品模块、用户模块、支付模块、促销模块、商家模块...
node.js按照功能的不同,可以将函数、对象分别放到不同的文件/目录下,这些文件/目录在node.js中就称之为是一个模块,暂时可以简单理解为xx.js就是一个模块

1、*模块化开发:分工合作、明确责任

node底层其实有一句话,我们虽然看不见:
		(function(exports,require,三个){
			//exports - {}空对象,放在此空对象里面的,向外部公开自己的成员 - 公开/暴露/导出
			//require - 函数,引入其实模块 - 引入
			//你写的代码
		})()
                		
                  1、*主模块 - 引入别的模块进行使用
			var xx=require("./模块文件名");//xx就是别人公开的对象

			特殊:./不可以省略

                  2、*分支/子模块 - 公开东西给别人使用
		     1、第一种方式:
			exports.属性名=属性值;
			exports.方法名=function(){};
		     
		     2、第二种方式:
			module.exports={
				属性名:属性值,
				方法名:function(){};
			}

2、Node.js中模块的分类

	1、官方模块 - 不需要下载安装,在你安装node.js环境的时候就已经安好了
	2、第三方模块 - 需要用npm去下载,明天再玩,多的一批:mongoose(数据库)、express(Node的框架,简化原生Node的)
	3、自定义模块:目前说白了就是一个xx.js

3、官方模块学习:

1、官方模块

global - 不需要引入的,可以直接使用的,全局对象依然可以省略不写		
exports:用于向外导出自己的成员
require:引入其他模块
__filename:返回当前模块的文件绝对路径 - 全名
__dirname:返回当前模块的文件绝对路径但是不包含模块名 - 对vscode你们有的人有用:你可能在node.js某一处不允许使用相对路径,但是你写绝对路径又怕累,怎么办,就靠__dirname
module:指代当前模块本身!包含着以上4个操作
	以下两个人不是当初的人,但是用法和当初一致
console:控制台对象
	定时器:周期性和一次性和瞬间定时器

面试题:exports可以公开,那module.exports也可以公开,他们的区别在哪里?

node.js底层有一句话:var exports=module.exports;意味着两个人其实都可以公开/暴露

但是如果你用了这句话:exports={},就覆盖了上面module.exports这句话,不再具有公开暴露的功能了

真正具有公开功能的是module.exports

2、querystring - 查询字符串:解析前端传来的查询字符串(请求消息、前端发来的东西)部分

		必须引入:var qs = require('querystring');
			var obj=qs.parse("查询字符串部分")
		垃圾:仅仅只能解析查询字符串部分,一个url可是由5个部分组成,url里面带有他,我们绝对不会单独使用此模块

3、*url - 解析前端传来的完整的url网址的各个部分

必须引入:var url = require('url');

var obj=url.parse("完整的url",true);//只要传入第二个实参true,则会自动调用querystring模块的parse方法解析查询字符串部分
		尤其记住两点:明天有大用
			*获取路由:obj.pathname;
			*获取请求消息:obj.query.键名;