Mysql
项目中操作数据库
安装mysql
const mysql = require('mysql')
通过mysql连接到Mysql数据库
const db = mysql.createPool({
host:'127.0.0.1',//数据库ip地址
user:'root',//登陆账号
password:'admin123',//登陆密码
database:'my_db_01'//指定操作的数据库
})
通过mysql执行SQL语句
//db.query 指定要执行的sql语句,通过回调函数拿到执行结果
db.query('select * from users',(err,results) => {
if (err) {
console.log(err);
}
console.log(results);
})
查询数据
const sql = 'select * from users'
db.query(sql,(err,results) => {
if (err) {
console.log(err);
}
console.log(results);
})
插入数据
const user = {
username:'haha12',
password:'123456'
}
const sql = 'insert into users (username,password) values (?,?)'
db.query(sql,[user.username,user.password],(err,results) => {
if (err) {
return console.log(err);
}
//如果为一,则插入成功
if (results.affectedRows === 1) {
console.log('success');
}
})
//简写
const sql = 'insert into users SET ?'
db.query(sql,user,(err,results) => {
if (err) {
return console.log(err);
}
//如果为一,则插入成功
if (results.affectedRows === 1) {
console.log('success');
}
})
更新数据
const user = {
id:1,
username:'haha12',
password:'123456'
}
const sql = 'update users set username=?,password=? where id=?'
db.query(sql,[user.username,user.password,user.id],(err,results) => {
if (err) {
return console.log(err);
}
if (results.affectedRows === 1) {
console.log('success');
}
})
//简写
const sql = 'update users set ? where id=?'
db.query(sql,[user,user.id],(err,results) => {
if (err) {
return console.log(err);
}
if (results.affectedRows === 1) {
console.log('success');
}
})
删除数据
const sql = 'delete from users where id=?'
db.query(sql,1,(err,results) => {
if (err) {
return console.log(err.message);
}
if (results.affectedRows === 1) {
console.log('删除成功');
}
})
express-session中间件
安装
npm i express-session
配置
app.use(session({
secret:'',//任意字符串
resave:false,
saveUninitialized:true
}))
存储数据
req.session
req.session.user = req.body;
取出数据
req.session.xx
清空session
req.session.destory()
Express使用JWT
安装相关包
// jsonwebtoken用于生成JWT字符串 express-jwt将jwt字符串解析还原成json对象
npm i jsonwebtoken express-jwt
导入
const jwt = require('jsonwebtoken')
const expressJWT = require('express-jwt')
定义secret密钥
为了保证jwt字符的安全性,需要定义一个用于加密和解密的secret密钥
//本质就是一个字符串
const secretKey = ''
登陆成功后生成jwt字符串
调用jsonwebtoken包提供的sign()方法,将用户信息加密成jwt自负床,响应给客户端
res.send({
status:200,
message:'success',
//三个参数分别为用户信息对象,加密密钥,配置对象
token:jwt.sign({username:'a'},secretKey,{expiresin:'30s'})
})
将jwt字符串还原为json对象
// unless({path:[/^\/api\//]})指定哪些接口不需要访问权限
app.use(expressJWT({secret:secretKey}).unless({path:[/^\/api\//]}))
使用req.user获取用户信息
配置成功express-jwt中间件,就可以把解析出来的用户信息挂载到req.user属性上
捕获解析JWT失败后产生的错误
如果客户端发送的token过期或不合法,会产生解析失败的错误,可以通过express的错误中间件捕获错误处理
app.use((err,req,res,next) => {
if(err.name === 'UnauthorizedError'){
return res.send({message:'无效token'})
}
return res.send({message:'未知错误'})
})