Node.js 从0到1全面解读

2020-12-23  本文已影响0人  张德瘦嬢嬢

1 为什么是Node

命令行工具

image.png

环境变量

环境变量的值就是路径。

环境变量就是比如,在我桌面员工hello.exe的程序。

配置环境变量之前:在命令行工具中我要打开hello.exe。首先我得需要在桌面目录下,如果有执行,没有就报错比如command not found。

配置环境变量之后:我们在任何目录(环境)下打开hello.exe,程序会首先在当然路径中到次文件,如果没有就在配置好的环境变量中,依次找次文件,

如何配置环境变量:

老规矩,图解

image.png

进程与线程概念

进程:是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。可以理解为运行环境比如车间

线程:是操作系统能够进行运算调度的最小单位,可以理解为比如车间工人

打开任务管理器可看到

image.png

单线程与多线程

单线程:一次执行一个任务

多线程:可以同时执行多个任务,高并发 阻塞

如此看来,是不是觉得多线程是更优的选择呢,快速高效。可以这么理解,多数程序比如Java就是多线程的。

但是多线程也会有弊端,比如Java在同时渲染页面的时有两种页面效果作用于一个元素,这时该如何处理?

nodejs是单线程的。

image.png image.png

2 Nodejs简介

1 就是js运行平台

Nodejs不是web框架,不能与Spring或Nodejs对比

不是编程语言,不能与Python或者PHP

是一个平台:将多种技术组合起来 让js也能调用系统接口,开发后端应用

image.png image.png

Nodejs工作流程

image.png

2 node的发展

瑞安·达尔(Ryan Dahl)- nodejs之父

image.png

3 node的特点

4 nodejs执行js文件

image.png

5 node整合到webstrom中

3 Node基础

模块化

初级程序员调方法,中级程序员会封装,高级程序员写框架。要封装就要模块化。

何为模块化:

如下我们把一些常用的方法封装在util.js中并暴露export出去,在需要使用该api的时候就需要在用的地方require引用

// util.js

exports.add=function (a,b) {

return a+b

}

exports.mul=function (a,b) {

return a*b

}

// main.js

const math=require('./util')

console.log(math.add(1,2))

image.png

引入概念:模块标识

模块又分成两大类:

1 核心模染

2 文件模块

image.png

export和module

exports是exports.module的引用

exports.a=a1

exporrs.b=b1

等价于

exports.module={a:a1,b:b1}

什么是包

通过npm init 命令可以生成一个package.json文件。这个文件是 整个项目的描述文件。通过这个文件可以清楚的知道项目的包依赖关系,版本,作者等信息。每个NPM包都有自己的package.json文件,使用这个命令将需要填写项目名,版本号,作者等信息。

执行

npm init -y

这样将会使用默认值生成package.json文件

就是个文件 增强的模块 压缩文件 把一些方便再次使用的时候下载直接使用的比如方法

image.png

包结构:

实际就是一个压缩文件,解压以后还原为目录。package.json必有

可选目录 lib bin doc test

包描述文件:package.json 放在包的根目录下 ,内容不能有注释

image.png image.png

必填字段:name version

image.png

那package-lock.json 又是什么?

npm简介

包管理工具

npm search 包名

npm -v

npm remove

npm install math --save

目录node_modules

npm init

npm install math

var math=require('math')

-g用得少

--save

-dev

image.png image.png

--save 会把依赖信息写入package.json的dependencies

当你的项目依赖很多包的时候 ,在上传代码的时候, 再上传node_modules的时候体量就变大了,

这个时候我们的package.json就起作用了。只需要在本地拉完你的项目时,使用者直接在

npm install

的时候就会根据里面的dependencies从npm上下载。而且还能保证npm上的包是实时更新了的

11. npm配置

淘宝镜像官网

npm服务器在国外,当你下载比较大的包时候。远,大,需要fq的时候。或者比如有人攻击npm的时候发很多很多轻请求的时候,npm就不稳定了。

创建一个 镜像服务器 (中国的服务器一个人去把npm服务器的东西下载)

镜像服务器: 为保证最新 每10分钟会去npm服务器去下载更新

配置镜像:

方法1

npm config set registry https://registry.npm.taobao.org 设置taobao源

npm config get registry 查看设置

方法2

npm install -g nrm

nrm use taobao

nrm ls 查看淘宝站点镜像之外还有其他的

建议不要用cnpm

12. node搜索包的流程

本级目录→上级→上级→根目录比如c盘(即使别的比如d盘有也不行)

有就马上用,没有就报错

13 Buffer缓冲区

当成数组 弥补数组的不足

用来存储二进制数据,比如图片等,传统的数组不行

image.png

Buffer是nodejs的核心对象。使用时 不需要引入 直接使用

var buf=Buffer.from('hello')

image.png

Buffer 68 65 6c....显示的是16进制(对应的hello中h e l l o的每个字母的Unicode编码),UTF-8转换工具

范围的00-FF,也就是00000000-11111111

image.png

但是为什么说Buffer是存的二进制呢?原因是在计算机存储机制中二进制太长了。都是以16进制来存储的

var buf1=new Buffer(10) //创建一个10个字节的buffer

等所有Buffer的构建函数方法 都已经被弃用,过期了

image.png

通过使用

alloc 分配

image.png image.png image.png

中最后一句会报错。

因为Buffer不像数组可以自增长度。在创建的时候长度就确定了。

实质上是因为,Buffer实际上是对底层内存的直接操作,分配了长度为10的连续空间,

当你需要在扩充长度的时候,就不能再保存后面连续的内存存在了

14 同步文件写入

文件系统file system

image.png

同步文件写入

操作步骤: 打开→ 写入→关闭

注意:不关闭 服务器就是一起开着的 会一直占用着内存 就像百度服务器 你不关就一直关的

<pre class="cm-s-default" style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">const fs = require('fs'); var zds=fs.openSync('/文件.txt', 'w') //zds 是open之后的返回的对文件的描述符 //flags打开要做操作的类型:r只读 w可写 fs.writeSync(zds,'今天是周日,天气不错哦') //写 fs.closeSycn(zds) //关闭</pre>

异步文件写入

简单文件写入

流式文件写入

fs模块的其他用法

上一篇 下一篇

猜你喜欢

热点阅读