导图社区 Node.js 学习总结
Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境。总结学习的初级Node的知识点,适合初学和复习。
编辑于2020-11-05 11:13:28Node
方法
repeat(i) 字符串重复拼接,i次数
endsWith(value,length) 检测指定子字符串结尾,length设置数组的长度,返Bool
startsWith(value,length) length长度设置数组开始位置
字符串方法
Object.is(v1,v2)
检测两个值是否相等, 字面相同且typeof检测结果相等 返bool
Object.keys(obj)
以数组形式返回对象的所有键名
Object.values(obj)
Object.entries(obj)
返回键名和键值组成的2维数组
Object.assign(obj,obj1..)
合并,拷贝相当于{...}
对象方法
new Set(arr) 数组去重
返回值是去重后的大对象,大对象不能使用数组的方法,属性 且Set返回的大对象是唯一一个可以使用forEach的对象
map()
forEach()
filter()
some()
every()
findIndex()
有回调函数,有三个参数item,index,arr 查找第一个符合条件元素的下标
find()
有回调函数,有三个参数 item,index,arr 查找第一个符合条件的元素
sort()
flat(infinity)
不加infinity实现仅将②维转成一维 加上infinity实现全维转一维
数组方法
map/forEach/filter/some/every/find/findIndex回调函数都有三个参数item,index,arr filter return:满足条件元素所组成的新数组 some() 返回值:bool,如果在回调函数return,那么返回值为return的结果 every() 返回值:bool,回调函数return结果为false是终止循环,(return结果决定着循环次数) 使用filter,some过滤出对象值含有数组元素的键值对: 
Number.isFinite(x)
检测是否为有穷数值,且不会将非数值转为数值(如果是数字且是又穷才是true) 
Number.isNaN(x)
检测传入的值是否是NaN,是返true,不是返false 需要注意的0/0也是NaN,'NaN'也不会转成NaN 
Number.parseInt(x)
trunc(x)
Math.trunc() 方法会将数字的小数部分去掉,只保留整数部分 参数会隐式转换成数字类型,或非数值转成NaN 
Number方法
sign(x)
检测数字是正数,负数还是零。 5种返回值, 分别是 1, -1, 0, -0, NaN. 代表的各是正数, 负数, 正零, 负零, NaN。 可以隐式转换 
Math方法
总结
三种声明
var : 声明提升 let : 没有声明提升 变量名不能重复 可以重新赋值 遇见{}形成暂时性死区,(暂时性死区内部和外部重复变量名不冲突) 可以使用数组方法 const : 不能重新赋值,以及改变数据类型
...扩展运算符
扩展运算符作用: 1.可以转数组,转对象 2.进行深拷贝 3.合并数组,对象 4.改变指针
解构赋值
 获取子数组或子对象用下标和键名 i0,i1/key,age 获取子数组或子对象的子元素用 下标/键名:[i0,i1]/{key,age} 获取不到,获取值为undefined使用默认值
箭头函数
1.自己本身没有作用域 2.在创建箭头函数时this指向已经确定 3.没有arguments,需要通过...(扩展运算符进行获取),不同的是,function 函数中的arguments还需要转成数组,但箭头函数通过扩展运算符直接获取的即为数组 4.不能当成构造函数进行new处理
陌生方法
方法: readyState 2请求已经接受,4表示请求已完成,3请求处理中 path.dirname() 只读出文件夹路径 path.format() 合并文件文件夹路径 gulp-rename 直接修改文件名和路径 path.join() 拼接为标准路径 wirteHead 设置服务器响应的状态码 querystring.parse 将url参数串转为对象 http.ClientResponse 中data代表相应数据到达时触发 插件: gulp-livereload (插件)实现网页自动刷新 gulp-babel (插件)将ES6代码编译成ES5 gulp-rev-collector (插件)在gulp中做路径的替换 gulp-html-minify (插件)压缩HTML文件 npm init -y 可以快速创建一个package.json文件 npm install 包名 -S 将框架安装到node_modules目录中 概念: npm充当的是nodejs的包管理工具
上传包与常见npm命令
如何发包: npm adduser 只输入一次即可 npm login 每次可能登录(密码输入不显示) npm init 生成一个package.json文件(name内不能有大写字母,可以写版本号) npm publish 上传包(5分钟后显示发的包) npm i 自己包名 下载包(不能再包名下下载) npm unpublish 包名 --force 删除包(必须超过24小时) 常用操作: -S, --save 安装包信息将加入到dependencies(生产阶段的依赖) -D, --save-dev 安装包信息将加入到devDependencies(开发阶段的依赖),所以开发阶段一般使用它 -E, --save-exact 精确安装指定模块版本 (输入命令npm install gulp -ES,留意package.json 文件的 dependencies 字段,以看出版本号中的^消失了) npm ls 查看安装的模块 npm ls -g 查看全局安装的模块及依赖 npm install 下载模块 npm uninstall 卸载模块 如卸载开发版本的模块 npm uninstall package --save-dev npm update 更新模块 npm outdated 检查模块是否已经过时 npm init 在项目中引导创建一个package.json文件 npm help 查看某条命令的详细帮助 npm root 查看包的安装路径 npm root -g查看包的安装路径 -g 全局下载 -v 简写,全称--version 查看包名 cd\ 根目录 cd.. 返回上一级目录 cd +文件目录 进入文件目录 cls 清屏 退出终端==》exit 全称==》process.exit() 不常用操作: 安装包,默认会安装最新的版本 npm i package 安装指定版本 npm install package@version npm install 模块的依赖都被写入了package.json文件后,他人打开项目的根目录(项目开源、内部团队合作),使用npm install命令可以根据dependencies配置安装所有的依赖包(npm i 包名 不会记录这个项目用了哪些包) npm install package全局安装(global),使用-g 或 --global npm cache clean --force 管理模块的缓存 npm view package 看到模块所有版本的信息
名字概念
class面向对象

promise
promise 主要解决回调地狱(异步处理) 缺点:1.一旦建立会立刻执行,中途无法取消 2.如果不设置回调函数,内部抛出的错误不会反应到外部 pending 初始状态,不是成功或失败状态 resolve 成功的回调 reject 失败的回调 catch 捕捉 promise 内部错误 如果没有传 reject 函数 你在promise 调用reject 那么 他就会报错 解决 第一 传函数(回调函数) catch promise可以链式调用 async 关键字 加在 函数前 结合 await 可以 默认获取 resolve返回值 await 相当于 一个断点 也就是 当我这行代码 执行完 才可以执行 下面的代码 Promise.all() 接受一个数组(都是Promise对象) 把数组中的promise一块执行(并行)并且返回一个执行的数组 在使用(async,await)时,async函数内只写let str=await promise 就可以获取失败或成功函数传过来的参数了,而promise内只写成功函数或失败函数,(此方法只能执行一种函数) 
fs
每一个方法都有同步异步两种方式,同步方法名以sync结尾,异步指定回调函数 fs中每个异步函数没有返回值 文件: readFile/writeFile/appendFile/copyFile/unlink 文件夹: mkdir/rmdir/readdir 文件文件夹: rename  文件操作:  文件夹操作:  文件文件夹操作: 
http
http内置模块常见操作: http.createServer ((request,response)=>{ response.writeHead(状态码,{ 'content-Type':'text/html;charset=utf-8'}) response.write() 向页面写入内容 esponse.end() 结束服务 }).listen(端口号,()=>{}) http.createServer 创建服务(请求体,响应体)(request,response) response.writeHead(状态码,{ 'content-Type':"}) response.write() 向页面写入内容 response.end() 结束服务 server.listen(端口号) 定义端口 Content-Type: text/plain纯文本 text/html;charset=utf-8 text/css text/javascript image/png image/gif text/jpeg application/json
path
path内置模块:(用于整理,转换,合并路径的) path.join() 拼接('src','b')拼为'src/b' path.extname() .前面没有内容一律返空, .前面有内容后面没有返 . , .前后都有内容返后缀 path.format() 只合并文件文件夹路径,不合并根路径
url
url 内置模块: 地址栏的一些操作 url.parse(url,true) '(传过来的url,bool默认为false是字符串 如果是true为对象)'
gulp
下载gulp,引入 方法: {task,src,dest,watch,series,parallel}=require('gulp') 包: gulp-sass,gulp-webserver,gulp,gulp-concat src() 方法 第一个参数写出匹配的目录 官方名字(globs) pipe() 方法 类似于.then只能跟在src后面 当src 找到目录之后开始执行pipe 从头到尾的顺序 watch() 进行监听文件 当文件发生改变时 会执行第二个参数回调 dest() 指定新文件去哪个位置 webserver 它是一个函数,在调用函数的时候,传入对象{port:端口号,middleware:(req,res)=>{}} gulp-sass 是进行编译的时候,要用到一个方法 不管后缀名为.scss都可以对这个包进行编译 代码案例: 
express
下载express,引入require(express), 初始设置: let express=require('express') let app=express() 挂载静态页面: app.use(express.static('根路径')) 注意:默认使用根目录中的index.html 如果是post请求,还要挂载解析数据的方法: app.use(express.join()) app.use(express.urlencoded()) 设置端口: app.listen(端口号,()=>{}) get请求: app.get('/接口',(req,res)=>{ let {}=req.query }) post请求: app.post('/接口',(req,res)=>{ let {}=req.body }) {}内为穿过来的对象内的对象内的属性名 json数据注意点: 数据内属性名,属性值要用 "双引号" 括起来 获取数据,如果是读物文件,要先转为utf-8,再用JSON转为对象 写入数据,要将数据转为stringify axios:代替promise和原生ajax的作用 地址: https://unpkg.com/axios/dist/axios.min.js (写在script标签src属性中) 方式一: axios.post('/接口',(res,rej)=>{}).then(res=>{},rej=>{}) 方式二: let fun=async()=>{ let pro=await axios('/接口',(res,rej)=>{}) pro.then(...) } 跳转路径: location.href='路径' 存储: localStorage.setItem('name',obj) localStorage.getItem('name')
ajax
ajax可以向后端发起一个请求: 
具体知识点
require(加载模块) 功能:读入并执行一个JavaScript文件,然后返回该模块的module.exports对象。如果没有发现指定模块,会报错 package.json 文件是包管理文件 npm init -y { "name": "npm-demo", //包的名字 "version": "1.0.0", //包的版本 "description": "\"这是我的第一个包\"", //包的描述 "main": "index.js", //包的入口文件 "scripts": { //配置脚本命令 "test": "echo \"Error: no test specified\" && exit 1" }, "author": "\"ShGe\"", //包的作者 "license": "ISC" //包的证书 }