node学习1
Posted wjboye
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了node学习1相关的知识,希望对你有一定的参考价值。
什么是前端和后端
后端的主要工作
-
后端为前端程序员暴露API接口;
-
后端也要操作数据库;
-
优化后端业务的性能;
前端的主要工作
-
绘制网页的页面(html)
-
写CSS样式美化页面、写JS做网页交互(更多的是网页的特效)
-
借助于 XHR(?.get $.post)请求后端的接口;实现前后端分离开发
-
使用前端的(框架)去完成界面的开发
-
总结:前端的主要工作:用户能看到的东西,基本上都是前端做出来;
前后端协作流程
-
将来进入工作,大家会接触到【前后端分离开发】;
-
协作开发的流程:后端为我们暴露数据接口,前端单纯的调用后端接口;
-
在当前Node阶段中,我们学习的是 后端开发;
-
在Node阶段,我们主要教大家如何写后端的接口;
环境安装
LTS 和 Current 版本区别
-
LTS 是长期稳定版的意思(这个安装包用起来比较稳定)【推荐在企业中使用】
-
Current 是最新特征版,这个安装包中有最新的Node特性,但是,可能有一些潜藏的Bug未解决;【推荐学习或尝鲜去使用】
下载安装
查看 Node 版本号
打开终端,在命令行输入命令node -v
即可如何进入终端呢?
-
使用快捷键
windows徽标 + R
打开运行面板,输入cmd
后直接回车; -
在任意目录的空白位置,先按住
shift
键不松开,然后,在空白位置,鼠标右键单击,会出来一个右键菜单,选择在此处打开 powershell/cmd 窗口
【将来第二种方式用的会多一些】
环境变量
什么是环境变量
Path环境变量的作用:能够让我们通过命令行的形式,快速启动一些应用程序;
系统环境变量和用户环境变量的区别
-
用户环境变量,是每个用户私有的,用户之间不会共享;
-
全局环境变量,是共享的,只要你能登录这台计算机,就能访问到全局的环境变量;【今后在配置环境变量的时候,推荐直接配置到系统环境变量】
通过命令行快速启动应用程序时,路径的查找规则
-
先在当前 cmd 终端的目录中查找,如果有则直接运行;
-
如果当前目录中没有,则去全局的path环境变量中查找;
浏览器中的 javascript
Javascript的诞生
-
JS 诞生 和 网景公司 有关;form
-
JS 诞生的需求,就是为了做客户端表单验证的;
-
JS作者刚把JS创建出来之后,它叫 LiveScript -> Javascript
浏览器一战
主角是 IE 和 网景浏览器;
-
一战的果实:ECMAScript 规范的确立!
-
短暂的和平期:在和平期阶段,JS都在做什么事情呢(进行表单的验证、做简单的网页动效、狗皮膏药),一战之后,JS能力有限,当时被称作是“脚本语言”
浏览器二战
在 2008 年,二战开始了;谷歌chrome、IE、火狐(浴火重生)在 2008 年,谷歌 利用 XHR 这个对象,实现了网页的局部刷新;2010 - 2013年左右,公司中,不管是Java,还是.NET, 还是 php(会不会Ajax)
-
二战的果实:XHR 对象的诞生; chrome 浏览器的 JS V8 解析引擎;
注意
在 一战 和 二战期间,JS 只能运行在 浏览器中;浏览器中的JS组成部分:ECMAScript核心 + DOM + BOM浏览器属于前端环境,所以,之前的JS只运行在前端浏览器中;也就是,无法使用Javascript实现后端编程;
Node中的Javascript
Node.js 的诞生,解放了Javascript,从此之后,Javascript 就可以在 服务器端运行了;
ECMAScript
Node中的Javascript也有一个ECMAScript核心
没有 BOM 和 DOM
Node中并没有浏览器的概念,所以,BOM和 DOM ,Node中不需要,因此,就把它们给剔除了;
全局成员
-
console
-
setInterval
-
setTimeout
-
...其它全局成员
模块系统
-
Node中自己扩展出来的一套API规范
Node中的JS组成部分
ECMAScript核心 + 全局成员 + 模块系统成员(这是Node平台所独有的)全局成员(console.log, setTimeout setInterval)模块系统成员(就是Node中的一些核心模块,提供了一些后端编程的能力)
ECMAScript 规范 和 浏览器中的JS 以及 Node 中的 JS 之间的关系
-
ECMAScript 规范(标准):就是一本书,这本书中记录了基本的语法定义;
-
浏览器中的 JS:浏览器中的JS是一门具体的编程语言,实现了 ECMAScript 规范;
-
浏览器中的JS组成部分: ECMAScript 核心 + DOM + BOM
-
Node中的JS:也是一门具体的编程语言,也实现了 ECMAScript 规范;
-
Node中的JS组成部分: ECMAScript 核心 + 全局成员 + 模块系统成员
画图说明 浏览器中JS 和 Node中JS的区别
总结-什么是 Node.js
基于 Chrome 的V8 JS 解析引擎之上,解放了Javascript的编程能力,为 Javascript 提供了 后端编程的能力;所以说,Node.js 是 一个后端编程的平台,用到的语言是Javascript;
Node.js 环境中执行JS代码的两种方式
REPL 环境
-
如何进入 REPL 环境: 打开任意终端,直接输入
node
并回车,就会进入到 REPL 环境中; -
如何离开 REPL 环境:按两次
ctrl + c
就能退出 REPL 环境; -
REPL中,每个字母代表什么意思呢:
-
R: Read 的意思,每当我们输入完毕代码之后,只要敲击回车,Node环境就会读取用户输入的代码
-
E:Evaluate 的意思,表示把 Read 进来的用户代码,调用 类似于 Eval 的函数,去解析执行
-
P:Print 输出的意思;把第二步中解析执行的结果,输出给用户;
-
L:Loop 循环的意思,表示当输出完毕之后,进入下一次的 REP循环
node 命令【推荐形式】
直接使用node 要执行的js文件的路径
来执行指定的JS文件
-
使用 ↑ 快速定位到上一次执行的命令
-
使用 tab 键能够快速补全路径
-
使用 cls 可以清屏
ECMAScript 6常用语法
let 与 const
之前定义变量,用 var 关键字,用var有没有缺点:1. 变量提升问题 2. 没有块级作用域let特性:
-
没有变量提升
-
有 { } 作用域const特性:
-
没有变量提升的问题
-
const 定义的常量,无法被重新赋值
-
当定义常量的时候,必须定义且初始化,否则报语法错误
变量的解构赋值
所谓的解构赋值,就是把 某个对象中的属性,当作变量,给解放出来,这样,今后就能够当作变量直接使用了
-
可以使用
:
为解构出来的变量重命名
// 变量的解构赋值
const { name : name123, age, gender } = person
console.log(name123)
字符串扩展
-
模板字符串
-
startsWith() 和 endsWith()
-
startsWith() 用来判断字符串,是否以指定的字符开头,如果是,返回值是 true,否则返回 false
-
endsWith() 用来判断字符串,是否以指定的字符结尾;如果是,返回值是 true,否则返回 false
-
padStart() 和 padEnd()
函数扩展
-
形参默认值
function add(x, y = 0) {
return x + y;
}
-
解构赋值和形参默认值结合使用
-
rest参数
// ------------------rest参数-------------------
function add(...args) {
console.log(args instanceof Array)
?
let total = 0
args.forEach(item => {
total += item
})
console.log(total)
}
?
add(1, 2, 3, 4)
-
扩展运算符
// ----------------------扩展运算符--------------
function add(...values) {
let total = 0
values.forEach(item => {
total += item
})
?
console.log(total)
}
?
const arr = [1, 2, 3]
add(...arr)
箭头函数【今后我们会每天写箭头函数的】
-
如何把 function 改成 箭头函数呢: 先把 function 删掉,然后,在 () 和 { } 之间,添加一个
=>
就好了 -
箭头函数的特性: 箭头函数内部的 this, 永远和 箭头函数外部的 this 保持一致;
-
箭头函数,本质上就是一个匿名函数
-
最标准的箭头函数格式是 ( 参数列表 ) => { 函数体 }
-
变体1: 如果 箭头函数左侧的 形参列表中,只有一个 形参,那么,( ) 可以省略 ( x ) => { console.log(x) } 可以改造成 x => { console.log(x) }
-
变体2:如果 箭头函数右侧的 函数体中,只有一行代码,那么, { } 可以省略 (x, y) => {console.log(x + y)} 可以改造成 (x, y) => console.log(x + y)
-
变体3:如果箭头函数 左侧 只有一个形参,右侧只有一行代码,那么, 左侧的 () 和 右侧的 {} 都可以省略 ( x ) => { console.log(x) } 可以改造成 x => console.log(x)
-
注意: 如果我们省略了 右侧的 { }, 那么,默认就会把 右侧函数体中的代码执行结果,返回出去 (x, y) => { return x + y } 可以简写成 (x, y) => x + y
对象中定义方法和属性的便捷方式
文件操作
文件读取
文件写入
文件追加
fs模块中路径操作问题【难点】
读取文件信息 fs.stat
读取指定目录中所有文件的名称 fs.readdir
练习:
-
复制指定的
1.txt
文件,并重命名为1 - copy.txt
-
整理
成绩.txt
文件中的数据到成绩 - ok.txt
文件中,整理好的文件中,格式类似于:
小红:99
小白:100
小黄:70
小黑:66
小绿:88
路径操作
-
path.join([...paths])
-
path.sep
-
path.basename(path[, ext])
-
path.dirname(path)
-
path.extname(path)
以上是关于node学习1的主要内容,如果未能解决你的问题,请参考以下文章