Node.js
1. 了解基本概念
语言 和 环境(平台) 之间的关系
- 语言,是编写代码的语法规范;程序员遵循特定的语法规范,编写出来的代码,只是单纯的文本字符串而已,并不具备可执行的特点;
-
环境(平台),提供了执行代码的能力,如果程序员编写的代码想要成功执行,必须要依赖于特定的执行环境;
- 例如:Javascript代码可以被浏览器中的JS解析引擎执行;
- 所以,浏览器,就是一个 Javascript 的执行环境;因为 Javascript 代码可以在浏览器中被执行;
前端 和 后端
- 前端主要工作
- 页面结构
- 美化页面样式
- 书写页面的业务逻辑
- 使用Ajax调用后台接口
- 后端主要工作
- 操作数据库
- 对外暴露操作数据库的API接口
- 前后端协作开发
浏览器环境 中的 Javascript
- 诞生:上世纪 90年代左右,网景 liveScript、表单验证
- 一战:
- 主角:微软和网景
- 结果:微软IE胜出
- 胜利的果实:ECMAScript 语言标准的诞生
- 二战
- 主角:谷歌、火狐、IE
- 结果:谷歌胜出
- 胜利的果实:谷歌的V8引擎是最快的JS解析引擎
- 浏览器中 Javascript 的组成部分
- ECMAScript核心 + DOM + BOM
Node环境 中的 Javascript
- 什么是 Node.js:就是 Javascript 的服务器端运行环境,可以让程序员使用 Javascript 来实现服务器端的编程;
- Node.js 中 Javascript 的组成部分
- ECMAScript 核心 + 全局成员 + 核心 API 模块
- 全局成员:console、setInterval、setTimeout。。。
- 核心 API 模块:就是 Node 平台 单独提供的一些API,这些API是Node平台所独有的;
- 注意:Node.js 中 没有 BOM 和 DOM
- 由于 Node 服务器端运行环境中,没有浏览器 和 HTML 的概念,所以,Node中的javascript 提出了 DOM 和 BOM 这两个对象模型,取而代之的,是 全局成员 和 核心 API 模块;
ECMAScript 规范,浏览器中的js,Node中的js之间的关系
- ECMAScript 规范(标准):就是一本书,这本书中规定了语言的特性;
- 浏览器中的js:
- 浏览器中的 js 组成部分:ECMAScript 核心 + DOM + BOM
- Node中的js:
- Node中的 js 组成部分: ECMAScript 核心 + 全局成员 + 核心API成员
环境安装
LTS 和 Current 版本区别
- LTS:【推荐在企业中使用】,是长期稳定版的安装包,运行稳定、安全;
- Current:【推荐学习或尝鲜去使用】,是最新特征版,这个安装包中有最新的Node特性;
下载安装
查看 Node 版本号
- 打开终端,在命令行输入命令
node -v
即可 -
Tips: 如何进入终端呢?
- 在任意目录的空白位置,先按住
shift
键不松开,然后,在空白位置,鼠标右键单击,会出来一个右键菜单,选择在此处打开 powershell/cmd 窗口
- 使用快捷键
windows徽标 + R
打开运行面板,输入cmd
后直接回车; - 也可以使用我推荐的cmder
- 在任意目录的空白位置,先按住
path 环境变量
-
什么是path环境变量
- Path环境变量的作用:能够让我们在终端中执行相关的命令,从而快速启动应用程序;
-
系统环境变量和用户环境变量的区别
- 用户环境变量:
- 系统环境变量:
-
通过终端输入命令的形式,快速启动应用程序时,路径的查找规则
- 先在当前运行 终端命令的 目录中查找,如果有则直接运行;
- 如果当前运行 终端命令的 目录中没有,则去全局的path环境变量中查找;
Node.js 环境中 执行 js 代码的两种方式
node 命令【推荐】
- 直接使用
node 要执行的js文件的路径
来执行指定的JS文件
小技巧:
- 在终端中,使用键盘的↑, 可以快速定位到上一次执行的命令
- 在终端中,使用键盘的
tab
键能够快速补全路径- windows 系统上,在终端中输入
cls
可以清屏
REPL 环境
-
如何进入 REPL 环境: 打开任意终端,直接输入
node
并回车,就会进入到 REPL 环境中; -
如何离开 REPL 环境:按两次
ctrl + c
就能退出 REPL 环境; - REPL中,每个字母代表什么意思呢:
- R: Read 的意思,每当我们输入完毕代码之后,只要敲击回车,Node环境就会读取用户输入的代码
- E:Evaluate 的意思,表示把 Read 进来的用户代码,调用 类似于 Eval 的函数,去解析执行
- P:Print 输出的意思;把第二步中解析执行的结果,输出给用户;
- L:Loop 循环的意思,表示当输出完毕之后,进入下一次的 REP循环
ECMAScript 6常用语法
let(变量) 与 const(常量)
- 之前定义变量,用 var 关键字;有如下主要缺点:
- 存在变量提升问题,降低 js 代码的可阅读性
- 没有块级作用域,容易造成变量污染
- let 主要特性:
- 不存在变量提升问题,只有定义之后才能使用此变量
- 有
{ }
作用域
- const 主要特性:
- 不存在变量提升问题,只有定义之后才能使用此变量
- const 定义的常量,无法被重新赋值
- 当定义常量的时候,必须定义且初始化,否则报语法错误
- const 定义的常量,也有 块级作用域
变量的解构赋值(常用)
定义:所谓的解构赋值,就是把 某个对象中的属性,当作变量,给解放出来,这样,今后就能够当作变量直接使用了;
- 可以使用
:
为解构出来的变量重命名
// 变量的解构赋值
const { name : name123, age, gender } = person
console.log(name123)
箭头函数(常用)
-
语法:
-
定义普通的
function
函数function show() { console.log('这是普通 function 定义的 show 方法') }
-
把方法定义为箭头函数(最完整的写法)
(形参列表) => { 函数体代码 }
-
-
箭头函数,本质上就是一个匿名函数;
-
箭头函数的特性: 箭头函数内部的 this, 永远和 箭头函数外部的 this 保持一致;
-
变体:
- 变体1:如果箭头函数,左侧的形参列表中,只有一个参数,则,左侧小括号可以省略;
- 变体2:如果右侧函数体中,只有一行代码,则,右侧的
{ }
可以省略; - 变体3:如果箭头函数左侧 只有一个 形参,而且右侧只有一行代码,则 两边的
()
和{}
都可以省略
-
注意: 如果我们省略了 右侧函数体的
{ }
,那么,默认会把 右侧函数体中代码的执行结果,当作箭头函数的调用结果 return 出去;
对象中 定义方法
和 定义属性
的便捷方式
文件操作
文件读取
- fs.readFile
文件写入
- fs.writeFile
文件追加
- fs.appendFile
fs模块中路径操作问题
-
使用 fs 模块操作文件的时候,如果提供的操作路径是
相对路径
, 则会根据当前执行node命令时的磁盘目录,去拼接提供的文件的相对路径,从而容易出现问题;例如:const fs = require('fs') // 调用 fs.readFile 方法时,提供的第一个参数是相对路径,容易出现问题 fs.readFile('./files/1.txt', 'utf-8', (err, data) => { if(err) return console.log(err.message) console.log(data) })
-
推荐使用 node 中提供的
__dirname
来解决 fs 模块操作文件时候的路径问题
读取文件信息 fs.stat
读取指定目录中所有文件的名称 fs.readdir
复制文件 fs.copyFile
更多文章访问个人博客:http://www.lfanliu.top
网友评论