Node.js学习笔记(一)

一 简介

1 什么是node.js

  • 就是 Javascript 的服务器端运行环境,可以让程序员使用 Javascript 来实现服务器端的编程;

2 Node.js 中 Javascript 的组成部分

  • ECMAScript 核心 + 全局成员 + 核心 API 模块
  • 全局成员:console、setInterval、setTimeout。。。
  • 核心 API 模块:就是 Node 平台 单独提供的一些API,这些API是Node平台所独有的;
  • Node.js 中 没有 BOM 和 DOM.取而代之的,是 全局成员 和 核心 API 模块

3 ECMAScript 规范,浏览器中的js,Node中的js之间的关系

  • ECMAScript 规范(标准):就是一本书,这本书中规定了语言的特性;
  • 浏览器中的js 组成部分:ECMAScript 核心 + DOM + BOM
  • Node中的 js 组成部分: ECMAScript 核心 + 全局成员 + 核心API成员

4 学习 Node.js 可以做什么

  • 像 PHP 一样,使用 Javascript 编写符合规范的后端 API 接口 或 网站
  • 使用 Node.js 开发一些实用的工具 或 包
  • 基于 Socket 技术,开发类似于聊天室之类的即时通讯项目
  • 基于 Electron 环境,开发桌面软件
  • ect…

二 环境安装

1 LTS 和 Current 版本区别:

  • LTS:【推荐在企业中使用】,是长期稳定版的安装包,运行稳定、安全;
  • Current:【推荐学习或尝鲜去使用】,是最新特征版,这个安装包中有最新的Node特性;

2 查看 Node 版本号

  • 打开终端,在命令行输入命令node -v即可
    Node.js - day1
  1. 整个node.js课程学习目标

  2. 【基础概念】

    • 什么是node.js以及node.js的特点
    • node.js适合做什么
    • 什么是模块化、什么是Common.js模块化规范
    • 模块、包、npm、包加载机制
    • etc…
  3. 【基本能力】

    • 掌握node.js中基本API的使用
    • 能够使用npm管理包
    • 能够使用ES6新语法
    • 能够使用node.js创建基本的web服务器
  4. 【高阶内容】

    • 能够使用Express框架、结合mysql数据库实现后端网站

注意:整个node.js学习阶段,概念类知识点较多,需要理解透彻!

  1. 了解基本概念

2.1 语言 和 环境(平台) 之间的关系

  1. 语言,是编写代码的语法规范;程序员遵循特定的语法规范,编写出来的代码,只是单纯的文本字符串而已,并不具备可执行的特点;
  2. 环境(平台),提供了执行代码的能力,如果程序员编写的代码想要成功执行,必须要依赖于特定的执行环境;
    • 例如:Javascript代码可以被浏览器中的JS解析引擎执行;
    • 所以,浏览器,就是一个 Javascript 的执行环境;因为 Javascript 代码可以在浏览器中被执行;

2.2 前端 和 后端

  1. 前端主要工作
    1. 页面结构
    2. 美化页面样式
    3. 书写页面的业务逻辑
    4. 使用Ajax调用后台接口
  2. 后端主要工作
    1. 操作数据库
    2. 对外暴露操作数据库的API接口
  3. 前后端协作开发

2.3 浏览器环境 中的 Javascript

  1. 诞生:上世纪 90年代左右,网景 liveScript、表单验证
  2. 一战:
    • 主角:微软和网景
    • 结果:微软IE胜出
    • 胜利的果实:ECMAScript 语言标准的诞生
  3. 二战
    • 主角:谷歌、火狐、IE
    • 结果:谷歌胜出
    • 胜利的果实:谷歌的V8引擎是最快的JS解析引擎
  4. 回顾:浏览器中 Javascript 的组成部分
    • ECMAScript核心 + DOM + BOM

2.4 Node环境 中的 Javascript

  1. 什么是 Node.js:就是 Javascript 的服务器端运行环境,可以让程序员使用 Javascript 来实现服务器端的编程;
  2. Node.js 中 Javascript 的组成部分
    • ECMAScript 核心 + 全局成员 + 核心 API 模块
    • 全局成员:console、setInterval、setTimeout。。。
    • 核心 API 模块:就是 Node 平台 单独提供的一些API,这些API是Node平台所独有的;
  3. 注意:Node.js 中 没有 BOM 和 DOM
    1. 由于 Node 服务器端运行环境中,没有浏览器 和 HTML 的概念,所以,Node中的javascript剔除了 DOM 和 BOM 这两个对象模型,取而代之的,是 全局成员 和 核心 API 模块;

2.5 ECMAScript 规范,浏览器中的js,Node中的js之间的关系

  1. ECMAScript 规范(标准):就是一本书,这本书中规定了语言的特性;
  2. 浏览器中的js:
    • 浏览器中的 js 组成部分:ECMAScript 核心 + DOM + BOM
  3. Node中的js:
    • Node中的 js 组成部分: ECMAScript 核心 + 全局成员 + 核心API成员

2.6 画图说明 浏览器中的js 与 Node中 js 之间的区别

2.7 总结

  1. 什么是 Node.js(我们自己给它下个定义)
    就是一个服务器端的Javascript运行环境,可以让程序员,通过 Javascript 做 后台服务器编程开发

  2. 学习 Node.js 可以做什么

    • 像 PHP 一样,使用 Javascript 编写符合规范的后端 API 接口 或 网站
    • 使用 Node.js 开发一些实用的工具 或 包
    • 基于 Socket 技术,开发类似于聊天室之类的即时通讯项目
    • 基于 Electron 环境,开发桌面软件
    • ect…
  3. 环境安装

3.1 LTS 和 Current 版本区别

  1. LTS:【推荐在企业中使用】,是长期稳定版的安装包,运行稳定、安全;
  2. Current:【推荐学习或尝鲜去使用】,是最新特征版,这个安装包中有最新的Node特性;

3.2 下载安装

3.3 查看 Node 版本号

  1. 打开终端,在命令行输入命令node -v即可
  2. Tips: 如何进入终端呢?
    • 【推荐】在任意目录的空白位置,先按住shift键不松开,然后,在空白位置,鼠标右键单击,会出来一个右键菜单,选择在此处打开 powershell/cmd 窗口
    • 【了解】使用快捷键windows徽标 + R打开运行面板,输入 cmd 后直接回车;

3.4 path 环境变量

  1. 什么是path环境变量

    • Path环境变量的作用:能够让我们在终端中执行相关的命令,从而快速启动应用程序;
  2. 系统环境变量和用户环境变量的区别

    • 用户环境变量:
    • 系统环境变量:
  3. 通过终端输入命令的形式,快速启动应用程序时,路径的查找规则

    • 先在当前运行 终端命令的 目录中查找,如果有则直接运行;
    • 如果当前运行 终端命令的 目录中没有,则去全局的path环境变量中查找;
  4. Node.js 环境中 执行 js 代码的两种方式

4.1 node 命令【推荐】

  1. 直接使用 node 要执行的js文件的路径 来执行指定的JS文件

小技巧:

  1. 在终端中,使用键盘的↑, 可以快速定位到上一次执行的命令
  2. 在终端中,使用键盘的 tab 键能够快速补全路径
  3. windows 系统上,在终端中输入 cls 可以清屏

4.2 REPL 环境 - 了解

  1. 如何进入 REPL 环境: 打开任意终端,直接输入 node 并回车,就会进入到 REPL 环境中;
  2. 如何离开 REPL 环境:按两次ctrl + c 就能退出 REPL 环境;
  3. REPL中,每个字母代表什么意思呢:
  • R: Read 的意思,每当我们输入完毕代码之后,只要敲击回车,Node环境就会读取用户输入的代码
  • E:Evaluate 的意思,表示把 Read 进来的用户代码,调用 类似于 Eval 的函数,去解析执行
  • P:Print 输出的意思;把第二步中解析执行的结果,输出给用户;
  • L:Loop 循环的意思,表示当输出完毕之后,进入下一次的 REP循环
  1. ECMAScript 6常用语法

5.1 let(变量) 与 const(常量)

  1. 之前定义变量,用 var 关键字;有如下主要缺点:
    • 存在变量提升问题,降低 js 代码的可阅读性
    • 没有块级作用域,容易造成变量污染
  2. let 主要特性:
    • 不存在变量提升问题,只有定义之后才能使用此变量
    • 有 { } 作用域
  3. const 主要特性:
    • 不存在变量提升问题,只有定义之后才能使用此变量
    • const 定义的常量,无法被重新赋值
    • 当定义常量的时候,必须定义且初始化,否则报语法错误
    • const 定义的常量,也有 块级作用域

5.2 变量的解构赋值(常用)

定义:所谓的解构赋值,就是把 某个对象中的属性,当作变量,给解放出来,这样,今后就能够当作变量直接使用了;

  • 可以使用 :为解构出来的变量重命名

    // 变量的解构赋值
    const { name : name123, age, gender } = person
    console.log(name123)
    

5.3 箭头函数(常用)

  1. 语法:
    • 定义普通的 function 函数
      function show() {
      console.log(‘这是普通 function 定义的 show 方法’)
      }
    • 把方法定义为箭头函数(最完整的写法)
      (形参列表) => { 函数体代码 }
  2. 箭头函数,本质上就是一个匿名函数;
  3. 箭头函数的特性: 箭头函数内部的 this, 永远和 箭头函数外部的 this 保持一致;
  4. 变体:
    • 变体1:如果箭头函数,左侧的形参列表中,只有一个参数,则,左侧小括号可以省略;
    • 变体2:如果右侧函数体中,只有一行代码,则,右侧的 { } 可以省略;
    • 变体3:如果箭头函数左侧 只有一个 形参,而且右侧只有一行代码,则 两边的 () 和 {} 都可以省略
  5. 注意: 如果我们省略了 右侧函数体的 { },那么,默认会把 右侧函数体中代码的执行结果,当作箭头函数的调用结果 return 出去;

5.4 对象中 定义方法 和 定义属性 的便捷方式

  1. 文件操作

6.1 文件读取

  • fs.readFile(path[,options]callback)
    path:要读取的文件的路径
    options :要以什么样的编码格式来读取指定的文件,默认编码格式为null
    callback:当文件读取完成,用回调函数处理读取结果
    参数1:error对象
    参数2:读取成功的结果
    const fs = require(‘fs’)
    fs.readFile(’./files/1.txt’,‘utf-8’,function(err,data){
    if(err) return console.log(‘读取文件失败’+err.message)
    console.log(‘读取文件成功,内容是’+data)
    }

6.2 文件写入

  • fs.writeFile(file, data[, options], callback)
    // 导入fs文件操作模块
    const fs = require(‘fs’)
    // 读取文件
    fs.writeFile(’./002-写入文件 .txt’,‘第二个文件’,‘utf-8’,(err,data) => {
    if(err) return console.log(‘读取失败’+err.message)
    console.log(‘写入成功’)
    })

6.3 文件追加

  • fs.appendFile(path, data[, options], callback)
    options默认值: ‘utf8’

6.4 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 模块操作文件时候的路径问题

  • 示例,从 /Users/mjr 运行 node example.js:
    console.log(__dirname);
    // 打印: /Users/mjr
    console.log(path.dirname(__filename));
    // 打印: /Users/mjr

6.5 读取文件信息 fs.stat

6.6 读取指定目录中所有文件的名称 fs.readdir

6.7 复制文件 fs.copyFile

  1. 练习

  2. 整理成绩.txt文件中的数据到成绩 - ok.txt文件中,整理好的文件中,格式类似于:

    小红:99
    小白:100
    小黄:70
    小黑:66
    小绿:88

  3. 路径操作

  4. path.join([…paths])

  5. path.sep

  6. path.basename(path[, ext])

  7. path.dirname(path)

  8. path.extname(path)

[摘抄自黑马笔记]

你可能感兴趣的:(node.js)