1.命令行窗口(小黑屏)、cmd窗口、终端、shell
常用指令:dir 列出当前目录下所有文件
cd 进入到指定的目录
md 创建一个文件夹
rd 删除一个文件夹
目录:. 表示当前目录
.. 表示上一级目录
cmd中执行web js文件(node+空格+js文件名)
2.进程和线程
进程:进城负责为程序的运行提供必备的环境。相当于工厂中的车间。
线程:(js是单线程的,Java是多线程的,传统的服务器都是多线程的)计算机中的最小的计算单位,线程负责执行进程中的程序。相当于工厂中的工人。
3.Node.js
(Node处理请求时是单线程的,但是在后台拥有一个I/O线程池)
Node.js是一个能够在服务器端运行JavaScript的开放源代码、跨平台的JavaScript运行环境。Node.js采用V8引擎运行js代码,使用事件驱动、非阻塞和异步I/O模式[I/O(Input/Output) I/O操作指的是对磁盘的读写操作]等技术来提高性能,可优化应用程序的传输量和规模。
用途:Web服务API,比如REST
实时多人游戏
后端的web服务,例如跨域,服务器端的请求
基于web的应用
多客户端的通信,如即时通信
4.模块化【模块引用】【模块定义】【模块标识】
在Node中,一个js文件就是一个模块(每一个js文件中的js代码都是独立运行在一个函数里的,而不是全局变量,所以一个模块中的变量和函数在其他模块中无法访问;
可以通过exports向外暴露变量和方法);
在Node中,通过require()函数引入外部模块,(如果使用相对路径,必须以.或者..开头;使用require()引入模块后,该函数会返回一个对象--即引入的模块);
在Node中有一个全局对象global,他的作用和window类似,在全局变量中创建的变量和函数都会作为global的属性和方法保存;
实际上模块中的代码都是包装在一个函数中执行的,在执行时,同时传递5个参数:
exports 该对象用来将变量或函数暴露到外部
require 函数,用来引入外部的模块
module 代表的是当前模块本身,exports就是module的属性,
既可以用exports导出,也可以用module.exports导出
—filename 当前模块的完整路径
—dirname 当前模块所在文件的完整路径
exports 和 module.exports
通过exports只能使用.的方式来向外暴露内部变量
exports.XXX = XXX
通过module.exports既可以使用.的方式,也可以直接赋值【建议使用module.exports】
module.exports.XXX =XXX
module.exports = { }
好处:降低耦合性; 方便代码复用
5.包文件 package
Common JS的包规范包括包结构(用于组织包中的各种文件)和包描述文件(描述包的相关信息,以供外部读取分析)
【实际开发做项目时,先把package.json创建出来】
【json文件里不能写注释】
6.NPM (Node Package Manage)
NPM帮助node完成第三方模块的发布、安装和依赖等。借助NPM,node与第三方模块之间形成了很好的生态系统。(安装完node后自带NPM)
NPM命令:
npm-v 查看npm版本
npm 帮助说明
npm version 查看所有模块的版本
npm search 包名 搜索模块包
npm install / i 包名 安装包
npm remove / r 包名 删除包
npm install 包名 -g 全局模式安装包(一般都是工具,在计算机里使用)
npm install 包名 --save 安装包并添加到依赖中
npm install 下载当前项目所依赖的包
npm install 文件路径 从本地安装
npm install 包名 -registry=地址 从镜像源安装
npm config set registry 地址 设置镜像源
【一般在git上下载项目里都没有人去上传node_modules 原因:1.上传或下载速度慢 2.不能保证是最新的】
7.Buffer缓冲区
buffer的结构、操作的方法与数组很相似。
数组不可以存储二进制的文件,而Buffer是专门存储二进制文件的,以十六进制的形式显示。
Buffer不用引用模块,直接使用即可
Buffer.from(str) 将一个字符串转换为Buffer
Buffer.alloc(size) 创建一个指定大小的Buffer
Buffer.alloUnsafe(size) 创建一个指定大小的Buffer,但包含敏感数据
buf.toString() 将缓冲区的数据转换为字符串
8.文件系统(fs)
文件系统就是通过node来操作系统中的文件
使用文件系统,需要先引入fs模块。fs是核心模块,直接引入不需要下载
使用fs模块,需要先对其进行加载 -const fs = require("fs");
fs模块中所有操作都包含同步(同步文件系统会阻塞程序的执行,除非操作完毕,否则不会向下执行代码)和异步(不会阻塞程序的执行,而是操作完成时,通过回调函数将结果返回)
同步文件的写入:1.打开文件 fs.openSync(path, flags[, mode ])
path 要打开文件路径
flags 打开文件要做的操作的类型 (r只读 w可写)
mode 设置文件操作权限,一般不传
返回值:该方法会返回一个文件的描述符作为结果,可以对文件进行操作。
2.向文件中写入内容 fs.writeSync(fd, string[, position[,encoding] ])
fd 文件的描述符,需要传递要写入的文件的描述
string 要写入的内容
position 写入的起始位置 ,一般不传
encoding 写入的编码,默认utf-8,一般不传
3.保存并关闭文件 fs.closeSync(fd)
fd 要关闭的文件的描述符
异步文件的写入:1.打开文件 fs.open(path, flags[, mode ],callback)
callback 回调函数
(异步方法没有返回值,异步调用方法的结果通过回调函数的参数返回)
2.向文件中写入内容 fs.write(fd, string[, position[,encoding] ],callback)
3.保存并关闭文件 fs.closeSync(fd,callback)
简单文件写入: fs.writeFile(file, data[, options ],callback)
fs.writeFileSync(file, data[, options ])
file 要操作文件的路径
data 要写入的数据
options 选项,可以对写入进行一些设置
flag (r 只读 w 可写 a 追加)
callback 写入完成以后执行的函数
简单文件读取: fs.readFile(path,[, options ],callback)
fs.readFileSync(path[, options ])
path 要读取文件的路径
options 读取选项
flag (r 只读 w 可写 a 追加)
callback 回调函数,通过回调函数将读取到的内容返回
流式文件写入:同步、异步、简单文件不适用于大文件的写入,性能较差,易导致内存溢出
fs.createWriteStream(path[, options ])
path 文件路径
options 配置的参数
流式文件读取:适用于较大文件,可分多次将文件存到内存里
fs.createReadStream(path[, options ])
可读:
可写:方法(1)
可写: 方法(2) [不写监听流,直接pipe]
9.fs模块其他方法
fs.existsSync(path) 验证路径是否存在
fs.stat(path,callback) 验证路径是否存在
fs.statSync(path)
fs.unlink(path,callback) 删除文件
fs.unlinkSync(path)
fs.readdir(path[,options],callback) 列出文件
fs.readdirSync(path[,options])
fs.truncate(path,len,callback) 截断文件
fs.truncateSync(path,len)
fs.mkdir(path[,mode],callback) 建立目录 [mode可不写]
fs.mkdirSync(path[,mode])
fs.rmdir(path,callback) 建立目录
fs.rmdirSync(path )
fs.rename(oldPath,newPath,callback) 重命名文件和目录
fs.renameSync(oldPath,newPath)
fs.watchFile(filename[,options],listener) 监视文件更改写入