【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】

如果你需要该项目的 源码请通过本篇文章最下面的方式 加入 进来~~


在这里插入图片描述


阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: redis

“【Node.js实战】一文带你开发博客项目之Express重构(初始化环境,处理 session,连接 redis)” 的相关文章