node.js基础

2022-04-19  本文已影响0人  A_走在冷风中

1.Node.js 概述

1.1 Node.js 不是一门编程语言,它是一个执行 JavaScript 代码的工具。工具是指可以安装在计算机操作系统之上的软件。
1.2 浏览器和 Node.js 都可以运行 JavaScript ,因为它们都内置了 JavaScript V8 Engine ,它可以将 JavaScript 代码编译为计算机能够识别的机器码。
1.3 浏览器中运行的 JavaScript 和 node.js 中运行的 JavaScript:

2、系统环境变量

3、安装 Node.js

4、全局变量

// process是全局变量,使用时,无需引入,引入也不报错,但是没有必须引入
// const process= require("process");
console.log(process)

//输出当前版本
console.log(process.version) //v14.16.0

//输出操作系统架构
console.log(process.arch)  // x64

//输出操作系统平台
console.log(process.platform) // win32

//环境变量
console.log(process.env)
//自定义环境变量
process.env.NODE_ENV = 'develop'
console.log(process.env.NODE_ENV) // develop

//获取进程编号
console.log(process.pid)  //(系统分配,每次执行不一样)

//杀死进程
process.kill() //参数:进程编号

5、模块成员导出与导入

6、 Module Wrapper Function 模块包装函数

7、Node.js 内置模块

在 Node.js 安装完成后,会内置一些非常有用的模块
Path: 模块内提供了一些路径操作相关的方法

// 引入
const path = require("path")

//获取当前文件所在的路径
console.log(process.cwd())
console.log(__dirname) 

//获取当前文件所在的路径
console.log(process.cwd())

//获取当前文件所在的路径
// dir = directory 目录 C:\Users\ROG\Desktop\拉钩教育\fed-e-task-base-03-01\code
console.log(__dirname) 

//获取当前文件的完整路径 C:\Users\ROG\Desktop\拉钩教育\fed-e-task-base-03-01\code
console.log(__filename) 

//获取文件的扩展名 .js
console.log(path.extname(__filename))

// 获取路径中的目录部分 C:\Users\ROG\Desktop\拉钩教育\fed-e-task-base-03-01\code
console.log(path.dirname(__filename))

//获取路径中的文件名 path.js
console.log(path.basename(__filename));

// 相当于../
const t = path.join(__dirname, '..') 
console.log(t) // C:\Users\ROG\Desktop\拉钩教育\fed-e-task-base-03-01

//将多个路径合并起来  
const a = path.join("d:/",'a', 'b')
console.log(a) // d:\a\b

fs: 文件操作系统,提供了操作文件的方法

// 文件写入
const fs = require("fs");

fs.writeFile('./1.txt','我是写入的内容', (err)=>{
  if(err){
    throw err;
  }
  console.log("写入成功")
});

// 文件读取
var flieName = path.join(__dirname, './1.txt');
fs.readFile(flieName, (err, data)=>{
  if(err) throw err;
  //data是二进制数据,但是以16进制数据输出
  console.log(data);
  console.log(data.toString()) // 我是写入的内容
})

// 文件删除
var flieName = path.join(__dirname, './1.txt');
fs.unlink(flieName, (err)=>{
  if(err) throw err;
  console.log("刪除成功")
})

//追加写入
fs.appendFile(__dirname + '/2.txt', '曾经有一首歌是这样唱的', err => {
  if(err) throw err;
  console.log("追加成功")
})

//创建目录
fs.mkdir('./a', err => {
    if(err){
        throw err;
    }
    console.log("success");
})

// 删除目录 rmdir 只能删除空目录
// 先删除目录下的普通文件,再通过rmdir删除空目录
fs.rmdir('./a', err => {
    if (err) {
        throw err;
    }
    console.log("删除成功");
})

//重命名
fs.rename(__dirname + "/a1", __dirname + "/a11", err => {
    if (err) {
        throw err;
    }
    console.log("重命名成功");
});

// 写文件
fs.readdir(__dirname, (err, data) => {
    if(err) throw err;
    console.log(data.length); //文件夹和文件都可以读取出来
    data.map((d)=>{
        console.log(d);
        fs.stat(__dirname + '/' + d, (err, stat) => {
            if(err) throw err;
            if(stat.isDirectory()){ //判断是否是目录
                console.log("目录:", d);
            }else if(stat.isFile()){
                console.log("文件:", d);
            }
        })
    })

const http = require("http")

/**
 * 创建服务器
 */
const server = http.createServer((req, res) => {
  res.statusCode = 200
  res.setHeader("Content-type", "text/plain;charset=utf-8")
  res.end("你好,node.js")
})

/**
 * 发布web服务
 */
const port = 3000;
const host = "localhost"
server.listen(port, host, ()=>{
  console.log(`服务器运行在htp://${host}:${port}`)
})

在引入内置模块时,使用的是模块的名字,前面不需要加任何路径

8、npm 概述

9、package.json

10、下载 Node.js 软件包

11、使用 Node.js 软件包

12、语义版本控制

1.版本号规范: 2.3.4  
    2:添加新功能(破坏现有API)==> 2.2.4
    3:添加新功能(不会破坏现有 API,在现有API 的基础上进行添加) ==> 2.4.4
    4:用于修复 bug ==> 2.3.5
2.版本号更新规范
    ^2.3.4:主要版本不变,更新次要版本和补丁版本
    ~2.3.4:主要版本和次要版本不变,更新补丁版本
    2.3.4:使用确切版本,即主要版本、次要版本、补丁版本固定

13、查看软件包实际版本

14、查看软件包的元数据

15、下载特定版本的软件包

16、更新软件包

17、项目依赖和开发依赖

18、全局安装与本地安装

19、npm-check-updates 强制更新

20、发布软件包

21、更新版本号

22、撤销已发布的软件包

23、更改 npm 镜像地址

24、 npx 命令

25、配置入口文件的作用

26、模块查找规则

27、异步编程

28、I/O

29、进程和线程

30、回调函数

31、基于 Promise 的异步编程

        const promise = new Promise(function (resolve, reject) {
            fs.readFile("./x.txt", "utf-8", function(error, data) {
                if (error) {
                    // 将状态从等待变为失败
                    reject(error)
                } else {
                    // 将状态从等待变为成功
                    resolve(data)
            })
        });
        promise.then(function (data) {
            console.log(data)
        }).catch(function (error) {
            console.log(error)
        })

Promise 链式调用
Promise.all 并发异步操作

        const fs = require("fs")
            Promise.all([
            readFile("./x.txt"),
            readFile("./y.txt"),
            readFile("./z.txt")
            ]).then(function (data) {
            console.log(data)
            })

基于异步函数的异步编程
Promise 虽然解决了回调地狱的问题,但是代码看起来仍然不简洁。
使用异步函数简化代码提高异步编程体验。
##### 1. 异步函数概述

        function readFile(path) {
            return new Promise(function (resolve, reject) {
                fs.readFile(path, "utf-8", function (error, data) {
                    if (error) return reject(error)
                    resolve(data)
                })
            })
        }
        async function getFileContent() {
            let x = await readFile("./x.txt")
            let y = await readFile("./y.txt")
            let z = await readFile("./z.txt")
            return [x, y, z]
        }
        getFileContent().then(console.log)
##### 2. util.promisify
在 Node.js 平台下,所有异步方法使用的都是基于回调函数的异步编程。为了使用异步函数提高异步编程体验,可以使用 util 模块下面的 promisify 方法将基于回调函数的异步 API 转换成返回Promise 的API。
       const util = require("util")
       const readFile = util.promisify(fs.readFile)
       async function getFileContent() {
       let x = await readFile("./x.txt", "utf-8")
       let y = await readFile("./y.txt", "utf-8")
       let z = await readFile("./z.txt", "utf-8")
       return [x, y, z]
       }
       getFileContent().then(console.log)

32、事件循环机制 Event Loop 机制概述

33、 Event Loop 的六个阶段

事件循环是一个循环体,在循环体中有六个阶段,在每个阶段中,都有一个事件队列,不同的事件队列存储了不同类型的异步API 的回调函数。

34、宏任务与微任务(异步API的类型)

35、 Event Loop 代码解析

36、process.nextTick()

37、setImmediate()

38、web 网站的组成

39、什么是 web 服务器

40、IP和域名

41、DNS 服务器

42、端口

43、URL

44、前台和后台,前端和后端

45、开发环境的说明

46、创建 web server

上一篇 下一篇

猜你喜欢

热点阅读