从0到1完成一个Node后端(express)项目(五、session、token)

news2024/10/7 4:34:54

往期

从0到1完成一个Node后端(express)项目(一、初始化项目、安装nodemon)
从0到1完成一个Node后端(express)项目(二、下载数据库、navicat、express连接数据库)
从0到1完成一个Node后端(express)项目(三、写接口、发起请求
从0到1完成一个Node后端(express)项目(四、路由、模块化、中间件、跨域)

Session

安装express-session中间件

npm install express-session

在这里插入图片描述

使用express-session

需要注意的是: 配置express-session一定要在app.use(router)挂载路由之前

const express = require('express')
const session = require('express-session')
const app = express()
app.use(express.urlencoded({ extended: true }));
app.use(express.json())

app.use(session({
    // 对session加密
    secret: 'shaka',
    resave: false,
    saveUninitialized: true
}))

app.post('/login', (req, res) => {
    if (req.body.username !== 'shaka' && req.body.password !== '123456') {
        return res.send('登陆失败')
    }
    // 把数据存储到session中
    req.session.user = req.body //用户信息
    req.session.isLogin = true //登陆状态
    res.send({ status: 200, message: '登陆成功' })
})

// 我们通过获取存储到session的数据来做一些处理
app.get('/username', (req, res) => {
    if (!req.session.isLogin) {
        return res.send({ status: 500, msg: '未登录' })
    }
    res.send({
        status: 200,
        msg: '请求成功',
        username: req.session.user.username
    })
})
// 清空session
// 退出登陆
app.post('/out', (req, res) => {
    // 销毁session
    req.session.destroy()
    res.send({
        status: 200,
        msg: '退出成功'
    })
})

app.listen(8888, () => {
    console.log('express服务器启动成功');
})


在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

当我们清空session后

在这里插入图片描述

token

安装jsonwebtoken、express-jwt

npm install jsonwebtoken express-jwt

jsonwebtoken用来生成token
express-jwt用来还原成JSON对象

在这里插入图片描述

使用

const express = require('express')
const app = express()
const jwt = require('jsonwebtoken')
const expressJWT = require('express-jwt')
const bodyParser = require('body-parser')
app.use(bodyParser.urlencoded({ extended: false }))
app.use(express.json())


// 定义密钥
const secretKey = 'shaka'
app.use(expressJWT.expressjwt({ secret: secretKey, algorithms: ["HS256"] }).unless({ path: [/^\/api\//] }))

app.post('/api/login', (req, res) => {
    const userinfo = req.body
    console.log(userinfo);
    if (userinfo.username !== 'shaka' && userinfo.password !== '12345') {
        return res.send({
            status: 400,
            message: '登陆失败'
        })
    }
    // 登陆成功
    // jwt.sign三个参数用来生成jwt字符串
    // 1、信息
    // 2、密钥
    // 3、配置token有效期
    const tokenStr = jwt.sign({ username: userinfo.username }, secretKey, { expiresIn: '30s' })
    res.send({
        status: 200,
        message: '登陆成功',
        token: tokenStr
    })
})

app.use((err, req, res, next) => {
    if (err.name === 'UnauthorizedError') {
        return res.send({
            status: 400,
            mnessage: 'token无效'
        })
    }
    res.send({
        status: 500,
        message: '未知错误'
    })
})

app.listen(8888, () => {
    console.log('express服务器启动成功');
})


在这里插入图片描述
完成

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

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

相关文章

“暗黑天使”降临:DarkAngels勒索病毒全解密

恶意文件分析 恶意文件描述 近期,深信服深盾终端实验室在运营工作中发现了一种 ELF 格式的勒索软件,该勒索软件近期开始出现,其释放的勒索信中的 Onion 链接似乎已关闭,这表明该勒索软件可能仍在开发中。 经过分析,…

AtCoder Beginner Contest 281 (A-F,口胡G)青大acmer 日常vp

A - Count Down 输出小于等于nnn的数 代码 B - Sandwich Number 题意 问字符串是否是第一个和最后一个字符是大小写,中间的字符是100000−99999100000-99999100000−99999之间的数字。 暴力模拟即可,需要注意的例子是A0100000AA0100000AA0100000A 代码 …

day14-常用API

1.API 1.1 API概述【理解】 什么是API ​ API (Application Programming Interface) :应用程序编程接口 java中的API ​ 指的就是 JDK 中提供的各种功能的 Java类,这些类将底层的实现封装了起来,我们不需要关心这些类是如何实现的&#xff…

VScode-git提交 无法推送refs到远端

在将代码同步到远端仓库时,弹窗提醒”无法推送refs到远端。您可以试着运行”拉取”功能,整合您的更改“ 但尝试后发现“拉取”功能也无法解决问题,最后是因为文件过大原因,在这里记录一下解决方法,并整理了另一种可能…

传输层协议:套接字Socket

介绍 socket是一种操作系统提供的进程间通信机制。 在操作系统中,通常会为应用程序提供一组应用程序接口(API),称为套接字接口(英语:socket API)。应用程序可以通过套接字接口,来使…

大数据分析案例-基于决策树算法构建金融反欺诈分类模型

🤵‍♂️ 个人主页:艾派森的个人主页 ✍🏻作者简介:Python学习者 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞&#x1f4…

春节期间外贸老鸟们都会掌握的那些事(内含祝福话术及邮件模板)

中国外贸规模在长期疫情的大环境下,外贸业界克服诸多困难,实现了量稳质升。随着我们迈入2023年,外贸人除了需要继续“强身健体”外,同时也将面临更多的挑战,本期Boom将从四个维度给大家分享临近中国春节期间&#xff0…

入门PostgreSQL,pg的历史,为什么说pg是国产化的方向,与mysql的比较

目录一、PG简介1、PG的历史2、PG的社区3、PostgreSQL与MySQL的比较一、PG简介 PostgreSQL 是一个免费的对象-关系数据库服务器(ORDBMS),在灵活的BSD许可证下发行。 PostgreSQL 开发者把它念作 post-gress-Q-L。 PostgreSQL 的 Slogan 是 “世界上最先进的开源关系…

python-MySQL数据库基础(三)MySQL与python交互

MySQL与python交互 用python代码来连接数据库,执行SQL语句,来查询到数据库中的数据。 当一张表中的数据量比较多时,而我们只需要查询其中的某个字段数据,直接查询会导致效率降低,此时就需要建立分表。 python操作MySQ…

君乐宝,高端之路不好走

文|螳螂观察 作者|kinki 近日,奶粉巨头雅培发表声明称,将逐步停止中国大陆市场的婴幼儿和儿童营养产品的运营和销售,一直以来,雅培都是中国奶粉市场前十名的“常客”,但近年却跌出了“前十”的位置。 雅培的退出&am…

2023年DataWhale 1月Free Excel 第三次打卡

第三章 Excel的表合并 Excel的合并计算工具可以快速完成多个表的行列记录合并。 1.多表行合并 问题:在3个消费表格中,每个客户的消费金额不同,使用多表合并功能统计每个客户消费的总金额。 具体步骤: 1.选择需要汇总的单元格…

ZooKeeper 技术内幕|Leader 选举是一个什么样的过程

几个问题,引发思考: 什么时候 leader 选举? 选举的过程? 选举过程中,是否能提供服务? 选举结果,是否会丢失数据? 服务器角色 2 个小问题: 服务器节点有多少角色&…

如何实现连杆码垛机械臂的逆解计算?

1. 连杆码垛机械臂介绍 连杆码垛机器人是工业应用场景中常用的一种机械臂,常用于简单的大负载搬运作业场景。常见的连杆码垛机械臂都是4个自由度,相较于6轴和7轴的机械臂成本较低。 连杆码垛机械臂的运动特性是:末端始终平行于地面。第一个平…

【算法】一篇文章弄清楚KMP算法的实现

目录 前言: 一.KMP算法简介: 二.next数组的介绍及实现 三.next数组的优化 四.伪代码和完整代码的实现 总结: 博客主页:张栩睿的博客主页 欢迎关注:点赞收藏留言 系列专栏:c语言学习 家人们写博客真…

小白的性能测试探索之路(1)

​​​​​​​ 某一天,领导突然就拉了个会说,我们成立稳定性专项,以测试为主力提升服务的整体稳定性? 当时我的内心是:“what”,性能测试我完全没接触过呀,i am a little tester~而…

华为MPLS-HubSub组网实验配置

目录 配置接口IP地址以及底层IGP协议 配置MPLS LDP协议 Sub与Hub建立Vpnv4邻居 配置PE与CE对接命令 Sub-PE与CE对接配置 Hub与CE对接配置 发现问题 PE与CE之间都采用EBGP方式进行路由传递 MPLS隧道——Hub&Spoke组网_静下心来敲木鱼的博客-CSDN博客_hub spokehttps…

Flume第二章:企业案例

系列文章目录 Flume第一章:环境安装 Flume第二章:企业案例 文章目录系列文章目录前言一、复制和多路复用1.案例需求2.案例实现3.结果查看二、负载均衡和故障转移1.需求案例2.案例实现3.结果查看三、聚合1.案例需求2.案例实现3.查看结果总结前言 这次我…

用python写的代码输入助手小程序(附源码)

命令太多,很容易忘记,还有很多代码片段想保存下来用到的时候能够快速输入,提高开发效率。在网上找了很多,发现都不是自己想要的。于是就用python写了一个自己用的代码输入助手小程序,我自己已经用了很长时间了&#xf…

工业中常用流量计及其测量原理

一、流量计单位 工程上常用单位m3/h,它可分为瞬时流量(Flow Rate)和累计流量(Total Flow),瞬时流量即单位时间内过封闭管道或明渠有效截面的量,流过的物质可以是气体、液体、固体;累…

Introduction to Multi-Armed Bandits——02 Stochastic Bandits

Introduction to Multi-Armed Bandits——02 Stochastic Bandits 参考资料 Slivkins A. Introduction to multi-armed bandits[J]. Foundations and Trends in Machine Learning, 2019, 12(1-2): 1-286. 在线学习(MAB)与强化学习(RL)[2]:IID Bandit的一些算法 B…