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

news2024/11/18 3:45:36

个人简介

👀个人主页: 前端杂货铺
🙋‍♂️学习方向: 主攻前端方向,也会涉及到服务端
📃个人状态: 在校大学生一枚,已拿多个前端 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

文章目录

  • Node.js系列文章目录
    • 一、前言
    • 二、初始化环境
      • 1、安装 mysql 和 xxs
      • 2、迁移文件
      • 3、修改 blog.js 文件
    • 三、Express 处理 session
      • 1、安装 express-session
      • 2、测试 session
    • 四、session 连接 redis
      • 1、登录测试
      • 2、使用 connect-redis 插件
      • 3、session 连接 redis
    • 三、写在最后


一、前言

前面我们学习了如何安装 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 项目进行初步的重构, 继续跟进学习吧!

后续会对该项目进行多次重构【多种框架(express,koa)和数据库(mysql,sequelize,mongodb)】

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


在这里插入图片描述


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/184137.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

循环UI列表

先看一下效果 支持自定义选项数量,按钮切换,鼠标滑动切换,当前项框选提示,选项缩放等功能 SlideSwitch:鼠标切换选项开关,关闭只能点击按钮切换 SlideOffset:滑动触发值,鼠标X轴向滑动大于此值切换选项,小于不触发 ScaleSwitch:缩放开关,开启…

乘法逆元 +数论分块 +平方和公式

年后准备学习啦,开学还得准备考试。 乘法逆元: 因为涉及到除法,所以取余这个操作就错误。 所以如果我们要求(a/b)%mod,我们可以假设 (a/b)%mod a*c%mod 那么c就是b的逆元。 怎么求逆元呢,其实有很多方法…

指定加拿大UBC|临床肿瘤专业应届博士成功获访问学者offer

G博士指定加拿大UBC,本人具有多年的临床工作经验,但科研产出较少。经过努力,最终我们落实了该校的访问学者职位。又历经半年的流程,G博士终于获得加拿大签证,前往UBC报到。建议:提前申请,预留出…

蓝桥杯刷题-入门题(终章一)

你是如风的少年~😃 空 清新民谣版 - 汪小敏 - 单曲 - 网易云音乐 自在的少年 - 要不要买菜 - 单曲 - 网易云音乐 最后15道入门题,做完这15道,NEWOJ就91道题AC了 目录 一,数根 二,最大值和最小值(I&…

Qt扫盲-QTime理论总结

QTime理论总结一、概述二、使用1. 属性获取2. 时间加减3. 字符串与QTime互转一、概述 QTime对象包含一个时钟时间,可以用小时数、分钟数、秒数和毫秒数来表示。它提供了比较时间和通过添加毫秒数来操作时间的函数。 QTime使用24小时时钟格式;它没有AM/…

bigemap如何设置等高线坐标系并输出

如何设置等高线坐标系并输出发布时间:2018-01-17 版权:投影设置及数据导出矢量等高线生成完成后(详细生成过程参加上一章节:矢量等高线生成),我们就能够设置投影和导出等高线数据。投影设置我们生成等高线默认的坐标是…

大数据集群环境搭建

文章目录本文要点内容大纲一、大数据集群环境搭建1.1、分布式、集群概念初识1.2、集群环境搭建1.2.1、虚拟机克隆1.2.2、修改IP、主机名1.2.3、主机名和IP映射配置1.2.4、防火墙关闭1.2.5、集群机器间免密登录1.2.6、跨机器远程copy文件1.2.7、集群的时间同步问题二、Centos软件…

【3】Linux权限管控

学习笔记目录 初识Linux--入门Linux基础命令--会用Linux权限管控--懂权限Linux实用操作--熟练实战软件部署--深入掌握脚本&自动化--用的更强项目实战--学到经验云平台技术--紧跟潮流 认知root用户 root用户(超级管理员) 无论是Windows、MacOS、L…

【iMessage苹果家庭推推送源码】掀开应用程序“终端”,输入CDDESKTOP运转指令证书

推荐内容IMESSGAE相关 作者✈️IMEAX推荐内容iMessage苹果推软件 *** 点击即可查看作者要求内容信息作者✈️IMEAX推荐内容1.家庭推内容 *** 点击即可查看作者要求内容信息作者✈️IMEAX推荐内容2.相册推 *** 点击即可查看作者要求内容信息作者✈️IMEAX推荐内容3.日历推 *** …

沁恒CH32V307单片机入门(01):基础说明与流程体验

文章目录目的基础说明芯片介绍资料与工具开发环境流程体验开发调试下载总结目的 工作这几年单片机主要就接触过 Atmel、Renesas、Microchip、ST 这些厂家的,最近几年因为内部外部的各种因素单片机的价格和供应都挺不稳定的,将来会发生什么也不好说。另外…

python jenkins使用方法/使用笔记

笔者也经常在网上查询信息,但发现很多信息都是照搬,内容甚至有错误,可用性很低.笔者就认为如果要分享就应该把遇到的问题真实的分享出来,让更多同路人少走弯路.节约时间.觉得这篇文章有帮助的同学可以点个赞!将真有用的信息传递给更多人!常用的方法安装 jenkins 依赖pip instal…

python+django校园失物招领系统_13i29.

用户注册:用户填写用户名、密码、年级、姓名、电话号码、邮箱 ,然后点击注册按钮进行注册。 用户登录:用户填写已经注册的用户名和密码并输入验证码,点击登录按钮进行登录。 搜索:用户可以在搜索栏输入关键字进行检索&…

京阳科技拟在上交所上市:计划募资12亿元,业绩波动较大

近日,山东京阳科技股份有限公司(下称“京阳科技”)预披露招股书,准备在上海证券交易所主板上市。本次冲刺上市,京阳科技计划募资12亿元,用于10万吨/年新能源锂电池材料前驱体项目。 据招股书介绍&#xff0…

【刷题】珠玑妙算

至此,我终于明白了哈希表真正的妙用。 目录 文章目录 前言 一、珠玑妙算 二、具体实现 1.哈希表的构建 2.总结规律 1)给出两个字符串:"YBBY","GYYB",构建哈希表:(少猜了一个…

ch2 计算机的发展史

1. 计算机的发展史 人类活动的需求, 推动因素: 电子技术的发展计算机体系结构技术的发展 1. 1 计算机的体系结构 冯诺依曼 体系结构的计算机; 以运算器为核心的 冯诺依曼结构; IBM 360 : 提出计算机系统结构的概念…

DeepTime:时间序列预测中的元学习模型

DeepTime,是一个结合使用元学习的深度时间指数模型。通过使用元学习公式来预测未来,以应对时间序列中的常见问题(协变量偏移和条件分布偏移——非平稳)。该模型是时间序列预测的元学习公式协同作用的一个很好的例子。 DeepTime架…

Win系统速览桌面功能失效 - 解决方案

Win系统速览桌面功能失效 - 解决方案问题解决方案步骤1:确保显卡驱动正常运行步骤2:检查任务栏设置步骤3:调整视觉效果问题 Win10系统支持用户鼠标悬停在任务栏右下角时速览桌面。但可能会因驱动和视觉效果设置等原因导致此功能失效。甚至任…

Linux基础IO+文件fd

1:文件理解文件内容属性,因此空文件在磁盘上也占用空间。文件用路径名文件名作为标识文件的唯一性。对文件的操作,就是对文件的内容属性的操作。在linux中,如果没有指定文件路径,默认在当前路径下执行操作。总结&#…

react配置环境变量

前端项目开发一般会区分三个环境: 本地环境(及开发环境)— development,测试环境 — test,生产环境 — production。 本地环境就是自己开发调试用的,一般是node起一个本地的服务,用webpack做接…

使用Python实现高效摸鱼,批量识别银行卡号码并且自动写入Excel表格

每当有新员工入职,人事小姐姐都要收集大量的工资卡信息,并且生成Excel文档,看到小姐姐这么辛苦,我就忍不住要去帮她了… 于是我用1行代码就实现了自动识别银行卡信息并且自动生成Excel文件,小姐姐当场就亮眼汪汪的看着…