【Node.js实战】一文带你开发博客项目之Express重构(初始化环境,处理 session,连接 redis)
阿里云国内75折 回扣 微信号:monov8 |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |
个人简介
👀个人主页 前端杂货铺
🙋♂️学习方向 主攻前端方向也会涉及到服务端
📃个人状态 在校大学生一枚已拿多个前端 offer秋招
🚀未来打算 为中国的工业软件事业效力n年
🥇推荐学习🍍前端面试宝典 🍉Vue2 🍋Vue3 🍓Vue2&Vue3项目实战 🥝Node.js🍒Three.js
🌕个人推广每篇文章最下方都有加入方式旨在交流学习&资源分享快加入进来吧
Node.js系列文章目录
内容 | 参考链接 |
---|---|
Node.js一 | 初识 Node.js |
Node.js二 | Node.js——开发博客项目之接口 |
Node.js三 | Node.js——一文带你开发博客项目使用假数据处理 |
Node.js四 | Node.js——开发博客项目之MySQL基础 |
Node.js五 | Node.js——开发博客项目之API对接MySQL |
Node.js六 | Node.js——开发博客项目之登录前置知识 |
Node.js七 | Node.js——开发博客项目之登录对接完毕 |
Node.js八 | Node.js——开发开发博客项目之联调 |
Node.js九 | Node.js——开发博客项目之日志 |
Node.js十 | Node.js——开发博客项目之安全 |
Node.js十 一 | Node.js——开发博客项目之初识 Express |
文章目录
一、前言
前面我们学习了如何安装 Express并初步理解了什么是中间件机制。
接下来我们再回到我们的 myblog 博客项目中去重构和完善我们的功能…
二、初始化环境
1、安装 mysql 和 xxs
终端键入
npm i mysql
npm i xss
2、迁移文件
我们原生node.js的工作并没有白做。接下来我们把之前写的代码初步迁移到 Express 版本的 myblog 博客项目中
3、修改 blog.js 文件
我们首先在查询上/list做点东西呈现出 list 的内容…
blog.js
var express = require('express');
var router = express.Router();
// 导入博客和用户控制器相关内容
const {
getList,
getDetail,
newBlog,
updateBlog,
delBlog
} = require('../controller/blog')
// 导入成功和失败的模型
const {
SuccessModel,
ErrorModel
} = require('../model/resModel')
// 博客列表
router.get('/list', function (req, res, next) {
// 博客的作者req.query 用在 GET 请求中
let author = req.query.author || ''
// 博客的关键字
const keyword = req.query.keyword || ''
// 查询的结果
const result = getList(author, keyword)
return result.then(listData => {
res.json(
new SuccessModel(listData)
)
})
});
// 博客详情
router.get('/detail', function (req, res, next) {
res.json({
errno: 0,
data: 'OK'
})
});
module.exports = router;
三、Express 处理 session
1、安装 express-session
- 使用 express-session 和 connect-redis简单方便
- req.session 保存登录信息登录校验做成 express 中间件
我们在控制台安装 express-session
npm i express-session
2、测试 session
之后在 app.js 中导入和使用 session
app.js
const session = require('express-session')
....
app.use(cookieParser());
// 解析完 cookie我们解析 session
app.use(session({
secret: 'QianDuan2023', // 密匙
cookie: {
// path: '/', // 根目录默认配置
// httpOnly: true, // 只能后端操作 cookie默认配置
maxAge: 24 * 60 * 60 * 1000 // 小时分钟秒毫秒
}
}))
之后在 user.js 中测试一下当前用户的状态存储每次刷新记录一次
user.js
router.get('/session-test', (req, res, next) => {
const session = req.session
if (session.viewNum == null) {
session.viewNum = 0
}
session.viewNum++
res.json({
viewNum: session.viewNum
})
})
四、session 连接 redis
1、登录测试
我们使用 /login-test 进行登录测试
user.js
验证登录的逻辑
var express = require('express');
var router = express.Router();
const {
login
} = require('../controller/user')
const {
SuccessModel,
ErrorModel
} = require('../model/resModel')
router.post('/login', function (req, res, next) {
// post 接口都是从 req.body 中获取
const {
username,
password
} = req.body
// 传入两个参数 用户名 密码
const result = login(username, password)
return result.then(data => {
if (data.username) {
// 设置 session
req.session.username = data.username
req.session.realname = data.realname
res.json(
new SuccessModel()
)
return
}
res.json(
ErrorModel('登录失败')
)
})
});
router.get('/login-test', (req, res) => {
if (req.session.username) {
res.json({
errno: 0,
msg: '已登录'
})
return
}
res.json({
errno: -1,
msg: '未登录'
})
})
module.exports = router;
2、使用 connect-redis 插件
终端键入安装
npm i redis connect-redis
在 db 文件夹下创建 redis.js 文件定义连接对象
redis.js
const redis = require('redis')
const {
REDIS_CONF
} = require('../conf/db.js')
// 创建客户端
const redisClient = redis.createClient({
url: `redis://${REDIS_CONF.host}:${REDIS_CONF.port}`,
legacyMode: true
})
// 连接
redisClient.connect()
.then(() => console.log('redis connect sucess!'))
.catch(console.error)
module.exports = redisClient
3、session 连接 redis
接下来我们修改 app.js 文件完成 session 和 redis 的连接
app.js
const RedisStore = require('connect-redis')(session)
......
// 获取到 redisClient
const redisClient = require('./db/redis')
const sessionStore = new RedisStore({
client: redisClient
})
// 解析完 cookie我们解析 session
app.use(session({
secret: 'QianDuan2023', // 密匙
cookie: {
// path: '/', // 根目录默认配置
// httpOnly: true, // 只能后端操作 cookie默认配置
maxAge: 24 * 60 * 60 * 1000 // 小时分钟秒毫秒
},
// 把 session 存储到 redis 里
store: sessionStore,
resave: false,
saveUninitialized: false
}))
三、写在最后
至此我们明白了 如何使用 Express 框架对我们的 myblog 项目进行初步的重构 继续跟进学习吧
后续会对该项目进行多次重构【多种框架expresskoa和数据库mysqlsequelizemongodb】
如果你需要该项目的 源码请通过本篇文章最下面的方式 加入 进来~~