学习Node.js时候的建议
前端和后端的知识体系不同!不要使用前端的思维方式去学习后端开发!
学习Node.js阶段,把自己当作后端开发人员!
课堂上对重点的知识做笔记,利用一切时间练习课堂代码;晚上抽半个小时梳理总结今天所学知识点;整理今天的笔记!
每天吃饭睡觉走大街上,都要在脑海中闪现今天学习的知识点【×××知识点是什么,怎么用】
什么是前端和后端
- 前端主要工作:写页面(HTML)、美化页面(CSS)、调用后台提供的API接口去请求或提交数据(JS);Ajax (XHR、Jquery .ajax .get $.post),Jquery更多的是进行DOM方面的操作!H5C3,高级、Angular(单页面应用程序)
- 前端主要在浏览器端进行开发;前端主要和页面打交道,用户看到的基本上就是我们前端写出来的(前端就是颜值)
- 后端主要工作:主要进行业务逻辑的操作、比如数据的增删改查、操作数据库、对外暴露API接口(后台是骨骼、灵魂)
- 前后端协作流程:前端写页面,前端调用后台的接口;后台接受前端发过来的请求,然后进行相关的业务处理,把处理的结果返回给前端(提供API接口)
Javascript 的起源
- 诞生:JS的诞生和一个公司有关,有一个网景公司;当时网速只有20~30KB(电话线),当时,就是为了进行客户端验证,为了减少不必要的网络请求,提高网络效率,网景公司决定研究一门语言,来解决这个问题;JS作者在10之内,就把这门语言写出来了,叫做LiveScript,为了搭上Java这般顺风车,就把LiveScript改名为Javascript;
- 浏览器中的一战:微软发现浏览器市场很火,然后就自己开发了一款浏览器【IE】;为了推广自己的IE浏览器,把IE捆绑到了Windows操作系统中;JScript
- 一战胜利的果实:ECMAScript标准的确立;就是一个语言规范;只规定了如何进行分支判断、如何定义变量、如何定义方法…..
- 短暂的和平期:IE6【微软发现自己已经天下无敌了,然后就把IE6的开发团队给解散了!】在和平期间,JS这门语言主要做什么:表单验证、简单的特效、狗皮膏药(当时被称为脚本语言)
- 二战:【主角:谷歌、IE、火(浴火重生)狐】谷歌在2008年,借助于AJax,开始火起来了!一方面提升渲染引擎的效率、另一方面,提升JS解析引擎的效率,最终,二战以谷歌的胜利结束;谷歌有了一款世界上效率最快的JS解析引擎,叫做chrome V8引擎;
Node.js 的起源
nodejs的历史由来
- 作者,之前主要是做高性能服务器维护的;高性能的服务器有哪些必要的条件;必须要是异步非阻塞的、基于事件驱动的;
- 作者在分析了上面两条基本条件之后,就开始研发高性能服务器!
- C,C++,Java,C#,Javascript
- 对于程序员来说,如果同时提供了同步和异步两种编程方式,程序员肯定会选择同步;
- 作者选择Javascript最主要的原因,就是这门语言是单线程的
- 多线程:程序员能主动开启子线程的语言,就叫做多线程的语言;Thread td = new Thread();
- 作者最终,选择的语言是Javascript、解析引擎是V8;
- 刚开始,作者写出来的这个东西叫做web.js;后来,随着项目扩大和功能的完善,作者发现这款产品,不仅能做高性能的服务器,还能做许多事情,比如可以用这个东西去做前端包管理;于是就改名叫做Node.js;
- 像前端需要好用的工具,都是使用node.js开发出来的!
ECMAScript、浏览器中的Javascript、Node中的Javascript
- ECMAScript:语言规范;不能使用ECMAScript进行实际的编程,因为它只是一个语言标准而已;
浏览器中的Javascript:是ECMAScript这个规范的具体实现;我们可以使用浏览器中的JS进行实际的编程!
浏览器中的Javascript组成部分:DOM + BOM + ECMAScript;其中,DOM和BOM和规范无关,是浏览器根据自己的需要,后期扩展的;
Node中的Javascript:是ECMAScript这个规范的具体实现;也能进行实际的编程!
Node中的Javascript组成部分:ECMAScript + 核心API + 其他第三方API,由于Node不需要操作浏览器对象和文档对象,所以把BOM和DOM给剔除了!核心API中,提供了 操作 文件的API 和 操作网络的 API等。。。。
什么是Node.js
Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境。
我们使用JS写的Node代码,说白了,只是单纯的字符串而已;
如果想要执行这些写好的代码,必须要有一个解析执行环境,这个环境就是chrome 的 V8 引擎;
Node.js 使用了一个事件驱动、非阻塞式 I/O 的模型,使其轻量又高效。
事件驱动:当触发某个事件的时候,执行事件中指定的代码!
非阻塞式 I/O 的模型:采用非阻塞的操作,能够提高处理的效率!
Node.js 的包管理器 npm,是全球最大的开源库生态系统。
先使用npm init -y初始化一下包管理文件package.json,将来所有安装的包,都会记录到这个文件中
- 使用npm install 包名 –save/–save-dev去安装包;其中,install可以简写成i;
- –save表示把包安装到部署依赖中(在开发和部署上线都需要使用的包); –save-dev表示安装到开发依赖(只在项目开发阶段需要用到的包);
- –save可以简写成-S;–save-dev可以简写成-D;
- npm uninstall 包名 –save/–save-dev或者npm remove 包名 –save/–save-dev
npm i webpack -g,其中,-g表示全局安装某些包,通过-g安装的包都在C:Users用户名AppDataRoamingnpm下面
NPM 和 (Github、码云) 和 Git之间的关系
大专栏 浅析nodei>NPM是包管理平台(里面托管了各种各样的包)
- Github、码云 代码托管平台(托管了各种各样的代码仓库)
- Git是用来对代码进行分支版本管理
补充:yarn
- yarn和npm的作用完全一样,都是用来管理项目中的第三方依赖包的!
- yarn是Facebook公司推出来的一套包管理工具!【后期咱们学习React,尤其是ReactNative的时候,默认就是用Yarn去装包的】
- yarn会缓存曾经安装过的包;但是npm也会缓存,但是效果不如yarn明显;
- yarn与npm的命令行小结
补充:如何设置npm和yarn的安装镜像:
什么是NPM淘宝镜像呢:由于每次安装包需要走国外的网络,速度很慢,所以,淘宝帮我们在国内创建了一个NPM包托管网站,能够提升使用NPM装包时候的速度!
配置npm的国内淘宝镜像:
npm config set registry https://registry.npm.taobao.org –global
npm config set disturl https://npm.taobao.org/dist –global配置yarn的国内淘宝镜像:
yarn config set registry https://registry.npm.taobao.org –global
yarn config set disturl https://npm.taobao.org/dist –global
总结:Node.js 就是一个Javascript的服务端运行环境(依赖于Chrome 的V8引擎),为Javascript提供了服务器端编程的能力!
Node.js 可以做哪些事情
- 【★】Node可以作为前端的一个工具去使用,通过NPM安装好用的工具;Node可以开发一些前端的工具【i5ting_toc】
- 【★】Node能做服务器
- 【★】Node还可以操作数据库并对外提供数据接口
- Node能做即时聊天
【★★】为什么要学习Node.js
从企业角度分析:
企业对一专多能人才的需求:怎么才能最大限度的压榨员工;省钱
- 多高性能服务器的需求:怎么才能最大限度的压榨服务器;
Node适合做快速的网络请求,但是不适合做大数据的业务逻辑的处理;
从自身角度分析:
挣钱;
- 对将来职业生涯有好处:学了Node之后,为我们构建了后端的知识体系,无论将来你会不会做后端的Node开发,但是,起码你已经构建了完整的前后端知识体系!
- 后面学到的任何新技术:Vue.js,React,React-Native都是基于Node的!包括后面要学的一个构建工具webpack!
在Node中执行相关的JS代码的两种方式
- 直接在命令行中输入node,进入Node的REPL运行环境:
- R:Read:读取用户输入的字符串内容
- E:Evaluate:把用户输入的字符串,当作JS代码去解析执行
- P:Print:打印输出Evaluate解析的结果
- L:Loop:进入下一次循环
- 将Node代码写入到一个js文件中,然后通过node 要执行的JS文件路径去运行Node代码
环境变量
为什么可以通过命令行形式,直接启动node或者notepad呢???
注意:每当修改了环境变量之后,需要重新启动命令窗口!
什么是环境变量
Path环境变量的作用:能够让我们通过命令行的形式快速启动一个应用程序;
用户变量和系统变量的区别、
用户变量:用户变量是属于每一个用户的,用户之间的用户变量是私有的,不共享的;
系统变量:系统变量是共享的,只能用户能够登录这台电脑,那么就能访问系统变量中的任何东西!【将来咋在配置环境变量的时候,推荐大家配置到系统变量中!】
配置环境变量的两种方式
- 第一种方式:直接把路径添加到path环境变量中;
- 第二种方式:先在环境变量中创建一个新变量,名字类似于:ZOOM_HOME这样,值是我们程序的根目录;然后,再把这个变量名,引用到 Path环境变量中,类似于:%ZOOM_HOME%
Path变量的查找规则
- 先从当前的目录中查找有没有这个应用程序,如果有,则直接运行,如果没有,则去系统环境变量中,path环境变量下挨个查找对应的文件夹,如果在对应文件夹中能找到,则直接运行,如果找不到,最终报错!
【★★】使用fs模块来操作文件
- fs.readFile
- fs.writeFile
- fs.appendFile
【★★★】fs模块中路径问题
箭头函数
Node中的使用http模块创建最基本的web服务器
之前有没有接触过Web服务器???
其实,PHPStudy中集成了一个叫做Apache的软件;这个软件就是一个服务器软件,能够托管一个网站;
其实在Node中,并没有类似于Apache这样软件;我们可以通过简单的几行代码,写出一个Web服务器!
【★★★】HTTP协议中的 请求 - 处理 - 响应 模型
【★★】step by step 构建HTTP服务器
升级1:根据不同的URL地址响应不同HTML消息
升级2:根据不同URL地址 - 响应不同的页面
升级3:在响应不同页面的同时响应静态资源(css、图片、js)
【★★★】【难点】升级4:根据不同URL地址 - 响应不同文件的改造
【★★】【难点】网页中资源请求路径问题
相关文章
- JavaScript——历史与简介
- 深入浅出Node.js(一):什么是Node.js
- I/O事件概述
- 理解Node.js事件驱动编程
- Node.js 中文网
- Node.js 英文官网
- Node.js 菜鸟教程
- CNode:Node.js专业中文社区
- 深入浅出Node.js(朴灵)完整扫描版.pdf
- HTTP Keep-Alive是什么?如何工作?
- 浏览器User-agent String里的历史故事
- art-template API
- yarn与npm的命令行小结