17.安装和配置数据库模块
17-1.安装数据库模块
- npm i mysql
17-2.配置数据库模块
- 导入mysql模块
// 导入mysql模块
const mysql = require('mysql')
- 建立与mysql数据库的连接
// 建立与mysql数据库的连接
const db = mysql.createPool({
host:'192.168.1.9',//数据库的ip地址
user:'root',//登录数据库的账号
password:'qwer',//登录数据库的密码
database:'my_db_01'//要操作的数据库名称
})
- 检测mysql模块是否正常工作
// 检测mysql模块是否正常工作
db.query('select 1',(err,results)=>{
if(err){
return console.log(err.message);
}
console.log(results);
})
成功连接:
18.查询和插入数据
18-1.查询数据
// 查询users的数据
db.query('select * from users',(err,results)=>{
if(err){
return console.log(err.message);
}
console.log(results);
})
18-2.插入数据
// 插入users的数据
// 1.要插入到users表中的对象
const user = {username:'man',password:'qwer'}
// 2.待执行的sql语句,其中?代表占位符
const sqlStr = 'insert into users (username , password) values (?,?)'
// 3.使用数组的形式,依次为?占位符提供具体的值
db.query(sqlStr,[user.username,user.password],(err,results)=>{
if(err){
return console.log(err.message);
}
if(results.affectedRows === 1){console.log('插入数据成功');}
})
19.跟新和删除数据
19-1.跟新数据
// 更新users的数据
// 1.更新用户信息
const user = {id:1,username:'lq',password:'520'};
// 2.定义sql语句
const sqlStr = 'update users set username=?, password=? where id=?';
// 3.执行sql语句
db.query(sqlStr,[user.username,user.password,user.id],(err,results)=>{
if(err){
return console.log(err.message);
}
if(results.affectedRows === 1){console.log('更新数据成功');}
})
19-2.删除数据
// 删除users的id=4的数据
// 1.定义sql语句
const sqlStr = 'delete from users where id=?';
// 2.执行sql语句
db.query(sqlStr,4,(err,results)=>{
if(err){
return console.log(err.message);
}
if(results.affectedRows === 1){console.log('删除数据成功');}
})
20.session中间件的使用
20-1.session中间件的配置
- 导入session中间件
const session = require('express-session')
- 注册session为全局中间件
app.use(session({
// 固定写法
secret:'lq',
resave:false,
saveUninitialized:ture
}))
20-2.向session中存数据
// 登录的api接口
app.get('/api/login',(req,res)=>{
if(req.body.username !== 'lq' || req.body.password !== 'qwer'){
return res.send({
status:1,
msg:'登陆失败'
})
}
// 登陆成功后的用户信息保存到session中
req.session.userinfo = req.body
// 用户的登陆状态
req.session.isLogin = true
})
20-3.向session中取数据
// 获取用户姓名的接口
app.get('/api/username',(req,res)=>{
// 判断用户是否登录
if(!req.session.isLogin){
return res.send({status:1,msg:'false'})
}
res.send({status:0,msg:'success',username:req.session.user.username})
})
app.listen(80 , (req,res)=>{
console.log('express运行在192.168.0.101');
})
20-4.清除session中取数据
// 退出登录清除信息的接口
app.get('/api/loginout',(req,res)=>{
// 用req.session.destory()清除登录信息
req.session.destory()
res.send({
status:0,
msg:'退出成功'
})
})
21.在express中使用JWT
21-0.安装并导入jsonwebtoken和express-jwt
// JWT
// 导入jsonwebtoken和session-jwt
const jwt = require('jsonwebtoken')
const expressJWT = require('express-session')
21-1.secret加密解密器
- secret的本质就是一个字符串
- 当生成JWT字符串的时候,需要使用secret密钥对用户的信息进行加密,最终得到加密好的JWT字符串
- 当把JWT字符串解析还原成JSON对象的时候,需要使用secret密钥进行解密
21-2.jsonwebtoken生成JWT字符串
- 调用jsonwebtoken包提供的sign()方法,将用户的信息加密成JWT字符串,响应给客户端
- sign(参数一:用户信息的对象,参数二:加密方式,参数三:配置对象)
// 登录的api接口
app.get('/api/login',(req,res)=>{
if(req.body.username !== 'lq' || req.body.password !== 'qwer'){
return res.send({
status:1,
msg:'登陆失败'
})
}
// 登陆成功后的用户信息保存到session中
req.session.user = req.body
// 用户的登陆状态
req.session.isLogin = true
// 在登陆成功后生成JWT字符
res.send({
status:0,
msg:'登陆成功',
token:jwt.sign({username:userinfo.username},secretKey,{expiresIn:'1h'})
})
})
21-3.express-jwt将JWT字符串解析还原成json对象
// express-jwt将JWT字符串解析还原成json对象
app.use(expressJWT({secret:secretKey}).unless({path:[/^\api\//]}))