【后端开发实习】Node.js搭建Web应用,用Redis维持session状态

发布于:2024-07-13 ⋅ 阅读:(145) ⋅ 点赞:(0)

Redis

Redis是什么

Redis是一个开源的、内存中的数据结构存储系统,可以用作数据库、缓存和消息代理。它支持多种数据类型,包括字符串、哈希、列表、集合和有序集合。由于它是内存级别的数据库,因此读写的速度很快。这里用来存放session最为合适。

Redis安装

安装教程

Redis的使用

  • Linux平台(Ubuntu20.04)
    启动方法:
sudo systemctl status redis-server

  • Windows平台
redis-server

时实交互:

redis-cli

另外vscode还开发了一款插件用来可视化展示redis,直接在插件市场里面搜索Redis就可以得到:
在这里插入图片描述

应用搭建

使用redis维持session状态

//创建Redis数据库连接
const RedisStore = connectRedis(session)

//
const redisClient = redis.createClient({
    host: 'localhost',
    port: 6379
})
//定义Session中间件
app.use(session({
    store: new RedisStore({ client: redisClient }),
    secret: 'secret$%^134',
    resave: false,
    saveUninitialized: false,
    cookie: {
        secure: false, // if true only transmit cookie over https
        httpOnly: false, // if true prevent client side JS from reading the cookie 
        maxAge: 1000 * 60 * 10 // session max age in miliseconds
    }
}))

将/路径下GET请求querystring中带有的参数及其缓存在session中

app.get("/", (req, res) => {
    const sess = req.session;
	//将请求保存在session中
	if (req.query) {
		for (let key in req.query) {
			sess[key] = req.query[key];
		}
	}
    if (sess.username && sess.password) {
        if (sess.username) {
            res.write(`<h1>Welcome ${sess.username} </h1><br>`)
            res.write(
                `<h3>This is the Home page</h3>`
            );
            res.end('<a href=' + '/logout' + '>Click here to log out</a >')
        }
    } else {
        res.sendFile(__dirname + "/login.html")
    }
});

访问/路径时,以json形式将session中缓存的参数内容打印到前台页面

app.get("/", (req, res) => {
    const sess = req.session;
	//将请求保存在session中
	if (req.query) {
		for (let key in req.query) {
			sess[key] = req.query[key];
		}
	}
	//将session数据以JSON格式输出
	const sessionJSON = JSON.stringify(sess);
    if (sess.username && sess.password) {
        if (sess.username) {
            res.write(`<h1>Welcome ${sess.username} </h1><br>`)
            res.write(
                `<h3>This is the Home page</h3>`
            );
			res.write( `<p>Session Data: ${sessionJSON}</p>`)
            res.end('<a href=' + '/logout' + '>Click here to log out</a >')
        }
    } else {
        res.sendFile(__dirname + "/login.html")
    }
});

注:上述开发实现了前后端分离,交互使用的是Ajax。


网站公告

今日签到

点亮在社区的每一天
去签到