nodejs学习笔记
node环境配置
安装
- 下载nvm(nodejs版本控制工具)
- 下载nodejs,选择mis文件
- 下载nvm,解压后以管理员身份运行install.cmd
- 修改setting.txt文件
- root:c:/dev/nvm
- path:c:/dev/nodejs
- 在C盘创建目录dev,创建两个子目录nvm和nodejs
- 配置环境变量
- 配置nvm环境变量
- NVM_HOME
- c:/dev/nvm
- NVM_HOME
- 配置nodejs环境变量
- NVM_SYMLINK
- C:/dev/nodejs
- NVM_SYMLINK
- 配置path
- 添加%NVM_HOMR%
- %NVM_SYMLINK%
- 配置nvm环境变量
- 安装和切换其他版本的nodejs
- 安装
- nvm install x.x.x
- 切换
- nvm use x.x.x
- 安装
nodejs全局成员概述
-
nodejs终端使用
-
运行node命令
- 运行原理与浏览器中的控制台基本相同
-
运行本地js文件
- 切换到目录下
- node xxx.js
-
node模块化
nodejs初识模块化
- 全局成员概述
- __filename
- 包含文件名称的全路径
- __dirname
- 文件的路径(不包含文件名)
- setTimeout(函数,xx毫秒)
- 定时函数
- 在执行到这一行的时候程序并不会停下来等定时函数执行完毕
- clearTimeout(timer)
- 清除定时函数
- buffer
- 文件操作
- global
- 与浏览器中的window对象类似
- process.argv
- 是一个数组
- 默认情况下,前两项数据分别是
- node.环境的路径
- 当前执行js文件的全路径
- 从第三个参数开始表示命令行参数
- node xx.js 参数1 参数2 参数3
- process.arch
- 当前系统的架构(32,64)
- __filename
模块化成员导出详解
- 模块化开发
- 传统非模块开发有如下缺点
- 命名冲突
- 文件依赖
- 标准的模块化规范
- AMD-require js
- CMD -seajs
- 服务器端的模块化规范
- CommonJS -node.js
- 模块化相关的规则
- 如何定义模块‘
- 一个js文件就是一个模块,模块内部的成员都是相互独立的
- 模块成员的导出和引入
- 引入模块
- require(‘文件路径’)
- 导出模块成员
- export.模块=模块
- module.exports=sum
- 引入时用module(有参?);
- 引入模块
- 如何定义模块‘
- 传统非模块开发有如下缺点
模块化细节补充
- 模块成员导出:global
- global.模块(参数名)=模块(实例)
- global中的XXX=XX模块
- 使用的时候直接使用global.参数名
- 为空的话会为undefined
- require模块的加载会被缓存
- 已经被加载的文件不会再加载
- 性能优化
- 模块文件的类型
- js
- json
- node(c语言开发文件)
- 假如有三个同名的js,json,node文件,则加载顺序为(引入时不加后缀名)
- js
- json
- node
- 模块分类
- 自定义模块
- 系统核心模块
- 访问官方API文档
- fs文件操作
- http网络操作
- path路径操作
- queryString查询参数分析
- url url解析
- …
- global.模块(参数名)=模块(实例)
node基础
node基本操作
buffer实例化
-
文件操作案例
-
初始化目录
- let root=‘文件路径’;
-
初始化数据
- 一个实例对象
-
创建项目根路径
-
引入模块
-
const path=require('path')
-
const fs=require('fs')
-
-
调用模块
//创建项目根路径 fs.mkdir(path.join(root,initData.projectName),(err)=>{ if(err) return; //创建子目录和文件 initData.data.forEach((item)=>{ if(item.type=='dir'){ //创建子目录 fs.mkdirSync(path.join(root,initData.projectName,item.name)); }else if(item.type=='file'){ //创建文件并写入内容 fs.writeFileSync(path.join(root,initData.projectName,item.name),fileContent(外部引入的模块html文件)) } )} });
-
-
buffer基本操作
-
buffer本质上就是字节数组
-
API
- 构造方法(class)
- 静态方法
- 实例方法
-
通过实例化来调用buffer(new)
-
let buf=new buffer(5);
//<Buffer a8 61 40 00 00>16进制- 实例化buffer对象
- 生成五个随机字节
- 不推荐使用
-
let buf=Buffer.alloc(5);
- 生成五个空的字节
-
-
通过静态方法
let buf Buffer.from('hello')
//buf产生此此字符的16进制编码const buf=Buffer.from(arr)
//传入一个16进制数字的数组- 打印出ASCII编码
- 可以使用toString方法转换为字符串
buffer实例化方法
- 实例化
- Buffer.from(array)
- Buffer.from(String)
- from方法可以增加第二个参数,编码(utf8,等,)
- Buffer.alloc(size)
- 功能方法
- Buffer.isEncoding()
- 判断是否支持该编码,
- 参数为编码号
- 返回一个boolean值
- Buffer.isBuffer()
- 判断是否为buffer
- 传入一个对象
- 返回一个boolean值
- Buffer.byteLength()
- 传入一个buf
- 返回指定编码的字节长度,默认utf8
- Buffer.concat()
- 传入一个buf对象数组
- 将一组buffer对象合并为一个buffer对象
- Buffer.isEncoding()
- 实例方法
- write()
- 向buffer对象中写入内容
- buf.write();
- 参数为字符串,写入长度,写入位置,字符编码
- slice()
- 截取新的buffer对象
- 参数为截取的起始位置,结束位置
- toString()
- 把buffer对象转换为字符串
- toJson()
- 把buffer对象转换为json形式的字符串
- 还可以用JSON.stringify()方法达到相同效果
- 传入一个buf对象
- 会自动把字符转换为十进制ASCII编码
- toJSON方法不需要显示调用,当JSON.stringify方法调用的时候会自动调用toJSON方法
- write()
核心模块API
-
路径操作
-
路径基本操作API
-
引入核心模块
const path =require('path')
-
获取路径的最后一部分
path.basename('/foo/bar/baz/asdf/quux.html(文件路径)','html'可不加)
- 返回一个文件名
-
获取路径
path.dirname('路径')
- 返回文件路径
-
获取文件的扩展名
path.extname('xxx.html')
- 返回html
-
路径的格式化处理
-
-