node.js(三)

82 阅读2分钟

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:'未知错误'})
})