1、查看安装版本
node -v
2、运行JavaScript文件
node 文件路径
3、fs文件系统模块
//读取文件
//引入fs文件系统模块
const fs = require('fs')
// fs.readFile()语法格式
// fs.readFile(path,options,callback)
// path:读取文件的路径 必选
// options:编码格式,默认值为UTF-8 可选
// callback:回调函数 必选
fs.readFile('./text.txt','utf-8',(err,dataStr)=>{
// 文件读取成功时,err默认值为null
// 如果读取失败,err为一个对象,dataStr为undefine
if(err){
console.log('文件读取失败',err.message)
} else {
console.log('文件读取成功:'+ dataStr)
}
})
// 写入文件
//引入fs文件系统模块
const fs = require('fs')
// fs.writeFile()语法格式
// fs.writeFile(file,data,options,callback)
// file:读取文件的路径 必选
// data:写入文件的内容
// options:编码格式,默认值为UTF-8 可选
// callback:回调函数 必选
fs.writeFile('./text.txt','写入测试123','utf-8',(err)=>{
// 写入成功时,err值为null
// 写入失败时,err是一个错误对象
if(err){
console.log('文件写入失败:', err.message)
} else {
console.log('文件写入成功')
}
})
4、path路径模块
const path = require("path");
const fs = require('fs')
// 路径拼接
// path.join()语法格式
// '../' 会抵消前面的一层路径
const pathStr1 = path.join('/a','/b/c','../','/d','e')
console.log(pathStr1) // \a\b\d\e
const pathStr2 = path.join('/a','/b/c','../../','/d','e')
console.log(pathStr2) // \a\d\e
// __dirname 当前文件所在目录
fs.readFile(path.join(__dirname,'text.txt'),'utf-8',(err,res)=>{
if(err)
return console.log('文件读取失败',err.message)
console.log('文件读取成功',res)
})
// path.basename(path,ext) 获取最后一个文件名称
// path:文件路径 必选
// ext:文件扩展名 可选
const pathStr3 = '/a/b/c/d.html'
const FullName1 = path.basename(pathStr3)
console.log(FullName1) // d.html
const FullName2 = path.basename(pathStr3,'.html')
console.log(FullName2) // d
// path.extname(path) 获取文件扩展名
const extName = path.extname(pathStr3)
console.log(extName) // .html
5、http模块
// res.setHeader()方法,设置 Content-Type 响应头解决中文乱码问题
res.setHeader('Content-Type','text/html; charset=utf-8')
// res.end()向客户端响应内容
res.end(str)
// 1 导入http模块
const http = require('http')
// 2 创建web服务器实例
const server = http.createServer()
// 3 为服务器实例绑定request事件,监听客户端请求
server.on('request',(res,err)=>{
console.log('Someone visit your web server')
})
// 4 启动服务器
server.listen(8080, ()=>{
console.log('server running at http://127.0.0.1:8080')
})
6、moment 时间格式化
// 引入moment模块
const moment = require('moment')
// 使用方法
const dt = moment().format("YYYY-MM-DD HH:mm:ss")
7、npm 发包
// 进行包的根目录打开终端
// 发包
npm publish
// 删除包
npm unpublish 包名 --force
8、nodemon 热更新
// 安装
npm i -g nodemon
9、bcrypt库加密、验证密码
// 下载
npm install bcrypt --save
// 引入
const by = require('bcrypt');
// 调用加密方法
// 参数一:用户信息
// 参数二:加密的强度(0~99),默认为10,等级越高,加密越强,解密性能越低
password = bcrypt.hashSync(userInfo.password, 10)
// 解密方法:返回的参数是一个Boolean值,比对成功则返回true,否则返回false
flag = bcrypt.compareSync("原始密码", "加密后的密码")
10、jsonwebtoken:生成token的包,用于接口权限访问认证
// 下载
npm install jsonwebtoken --save
// 引入
const jsonWebToken = require('jsonwebtoken ');
// 定义加密解密token的密钥
jwtSecretKey = 'xxx'
// 对用户信息进行解密,生产token字符串
// 参数一:用户信息,一般不包括用户密码和头像
// 参数二:密钥
// 参数三:有效期:10s, 10h
const tokenStr = jsonWebToken.sign(user, jwtSecretKey, {expiresIn: '10h'})
给客户端返回的token值还需要包含前缀"Bearer "
res.send({token: 'Bearer ' + tokenStr})
11、express-jwt:解析token的中间件
// 下载
npm install express-jwt --save
// 需要在路由引入之前引入
// 引入
const expressJwt= require('express-jwt');
// unless的path参数,以xxx开头的api不需要认证
app.use(expressJwt({secret: '生成token时定义的密钥'}).unless({path: [/^\/api/]}))
//还需要在错误捕获的中间件中进行处理
app.use((err, req, res, next)=>{
if(err.name == 'UnauthorizedError') return res.send({code: -1, msg: '身份认证失败!'})
})