node 的特点
1.非阻塞的i(input)/o(output)模型
通过异步回调将阻塞操作变成非阻塞
一般情况下 io操作都是阻塞的(网络请求(同步和异步) 文件操作 数据库操作…)
2.事件驱动
该特点决定了nodejs 适合于处理高并发
环境配置
安装
- 直接安装
- 通过nvm安装
nvm list 查看安装过的所有node版本
nvm install 版本号
nvm uninstall 版本号
nvm use 版本号
npm
初始化项目
npm init
npm init --yes
下载包
npm install jquery --save-dev 下载开发依赖 开发环境
npm install swiper --save 下载生产依赖 上线环境
npm install 包名字 默认生产依赖
npm install jquery@2.7.0 指定版本下载
删除包
npm uninstall 包名
查看镜像源
$ npm config get registry http://registry.npmjs.org/
$ npm config set registry 淘宝镜像的连接地址 https://registry.npm.taobao.org
模块化
规范:AMD CMD COMMONJS(node)
模块3步走(功能代码的抽离)
1. 创建一个模块,并抛出 module.exports=模块
let obj={
sayHello(name){
console.log('你好'+name)
}
}
//抛出模块
module.exports = obj
2. 引入模块 require('路径')
let Name = require('./name')
//导入了一个文件
console.log(Name)
Name.sayHello('小明')
- 使用模块
理解模块:
把某一些功能点进行抽离
功能代码的抽离
—举个栗子—
理解模块:
模块理解成函数
把某一个功能理解成函数
使用的时候直接引入 然后直接调用
模块的分类
1、内置模块: node中自己携带的模块,直接使用(不需要安装)
2、第三方模块: 先下载模块再使用(别人写的模块)
3、自定义模块 :开发者自己写的模块
文件操作模块(curd)c创建 u更新 r读取 d删除 == 增删改查
1.文件夹的操作
1.创建文件夹 mkdir
2.删除文件夹 rmdir
3.修改文件夹 rename
4.读取文件夹 readdir
每一个方法都有两种方式
1.同步
2.异步
创建文件夹的方式
1.异步的方式
//引入文件相关的模块
const fs = require('fs')
fs.mkdir('./haha',(err)=>{
console.log(2)
console.log(err)
})
//中间这一步是阻塞的 在node中通过异步的方式 变成了非阻塞
console.log(3)
打印结果是132
2.同步的方式
//引入文件相关的模块
const fs = require('fs')
let result = fs.mkdirSync('./xixi')
console.log(result)
删除文件夹 1.异步的方法
//引入文件相关的模块
const fs = require('fs')
fs.rmdir('./hihi',(err)=>{
if(err){console.log('删除失败')}
else{console.log('删除成功')}
})
2.同步的方法
//引入文件相关的模块
const fs = require('fs')
let result = fs.rmdirSync('./xixi')
console.log(result)
修改文件夹
//引入文件相关的模块
const fs = require('fs')
fs.rename('.haha','./demo',(err)=>{
console.log(err)
})
读取文件夹
//引入文件相关的模块
const fs = require('fs')
fs.readdir('./',(err,infos)=>{
//err 读取状态 infos 读取到的内容
console.log(err,infos)
})
2.对文件的操作
1.创建一个文件 writeFile 覆盖写入(可以把之前写的覆盖掉)
2.修改一个文件 appendFile
3.删除一个文件 unlink 全部删除了
4.读取一个文件 readFile
创建一个文件的方式
const fs = require(‘fs’)
创建
fs.writeFile(’./hehe.txt’,‘我好漂亮哦哈哈哈’,(err)=>{
console.log(err)
})//可以把之前写的全部覆盖掉
修改一个文件的方式
const fs = require(‘fs’)
fs.appendFile(’./hehe.txt’,‘韩梅梅和李雷’,(err)=>{
console.log(err)
})//在原有的文字上直接添加
打印结果:我好漂亮哦哈哈哈 韩梅梅和李雷
删除一个文件夹的方式
const fs = require(‘fs’)
fs.unlink(’./hehe.txt’,(err)=>{
console.log(err)
})
读取一个文件夹的方式
共有两种方式
因为有buffer 它是一个二进制的数据流
第一种方式 用toString转
const fs = require(‘fs’)
fs.readFile(’./hehe.txt’,(err,data)=>{
console.log(err)
//打印出来的Buffer 是一个二进制的数据流
console.log(data.toString())
})
第二种方式 写‘utf8’
fs.readFile(’./hehe.txt’,‘utf8’,(err,data)=>{
console.log(err)
//打印出来的Buffer 是一个二进制的数据流
console.log(data)
})
判断读取文件的类型
const fs = require(‘fs’)
fs.stat(’./hehe.txt’,(err,state)=>{
console.log(state)
console.log(state.isFile())//判断是不是一个文件true
console.log(state.isDirectory())//判断是不是一个文件夹false
})
tips:
在文件操作通常写的是绝对路径
console.log(__dirname)//当前文件所在文件夹的绝对路径
const result = path.join(__dirname,‘hehe’,’./a.txt’)
//将所有的参数拼接成一个路径(path.join)
js代码执行过程中 ./相对路径 指的是node命令的执行路径