window下 express 启用 redis ( connect-redis )

本文介绍如何在Node.js应用中使用Express框架配置会话管理,并通过Connect-Redis中间件实现会话数据的Redis存储。此外,还提供了Windows环境下Redis服务的安装与启动指南。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、node 安装引入

npm install connect-redis

var session = require('express-session');
var redisStore = require('connect-redis')(session);

var sessionConfig = {
  cookie: {
    secure: false,
    maxAge: 1000 * 60 * 60 * 24 * 30
  },
  sessionStore: {
    host: 'localhost',
    ttl:1800,
    port: 6379,
    logErrors: true
  }
}

app.use(session({
  secret: "app", // 对session id 相关的cookie 进行签名
  resave: false,
  saveUninitialized: false, // 是否保存未初始化的会话
  store : new redisStore(sessionConfig.sessionStore),
  cookie: sessionConfig.cookie
}));

2、windows 启动redis服务

 下载解压 https://github.com/MicrosoftArchive/redis/releases

先用管理员模式打开cmd,到redis的根目录,再输入下面的命令

windows 注册服务 
redis-server --service-install redis.windows.conf  

windows 启动服务 
redis-server --service-start

windows 停止服务
 redis-server --service-stop

 

 

const express = require('express'); const session = require('express-session'); const bodyParser = require('body-parser'); const db = require('./db'); const path = require('path'); const http = require('http'); const https = require('https'); const app = express(); const PORT = 4000; // 静态资源目录(前端页面、js、css等放这里) // 这里如果你有静态资源放在 static 或者 public 目录,请根据实际调整 app.use('/static', express.static(path.join(__dirname, 'static'))); // 如果 styles.css 也在当前目录,可以改成这样暴露: app.use(express.static(__dirname)); // 使用 session 中间件 app.use(session({ secret: 'your-secret-key', resave: false, saveUninitialized: true, cookie: { maxAge: 24 * 60 * 60 * 1000 } // 一天过期 })); app.use(bodyParser.urlencoded({ extended: false })); // 登录验证中间件 const requireLogin = (req, res, next) => { if (req.session.loggedIn) { next(); } else { // 未登录,重定向回登录页 res.redirect('/'); } }; // 根路径,根据登录状态发送不同页面 app.get('/', (req, res) => { if (req.session.loggedIn) { res.sendFile(path.join(__dirname, 'home.html')); // 修改这里 } else { res.sendFile(path.join(__dirname, 'login.html')); // 修改这里 } }); // 登录处理 app.post('/login', (req, res) => { const { username, password } = req.body; const sql = 'SELECT * FROM users WHERE username = ? AND password = ?'; db.query(sql, [username, password], (err, results) => { if (err) { console.error(err); return res.status(500).send('服务器错误'); } if (results.length > 0) { req.session.loggedIn = true; req.session.username = results[0].username; // 拼音用户名 req.session.name = results[0].name; // 中文真实姓名 res.redirect('/'); } else { res.send(`<script>alert("用户名或密码错误"); window.location = "/";</script>`); } }); }); // 获取当前登录用户信息接口 app.get('/api/username', requireLogin, (req, res) => { const sql = 'SELECT username, name FROM users WHERE username = ?'; db.query(sql, [req.session.username], (err, results) => { if (err || results.length === 0) { return res.status(500).json({ error: '查询失败' }); } const user = results[0]; res.json({ username: user.username, name: user.name }); }); }); // 退出登录 app.get('/logout', (req, res) => { req.session.destroy(() => { res.redirect('/'); }); }); // 内置 HTTP GET 请求封装函数 function httpGet(url, headers = {}) { return new Promise((resolve, reject) => { const lib = url.startsWith('https') ? https : http; const options = new URL(url); options.headers = headers; lib.get(options, (res) => { res.setEncoding('utf8'); let data = ''; res.on('data', chunk => { data += chunk; }); res.on('end', () => { if (res.statusCode >= 200 && res.statusCode < 300) { try { const json = JSON.parse(data); resolve(json); } catch (err) { reject(new Error('响应解析失败:' + err.message)); } } else { reject(new Error(`请求失败,状态码:${res.statusCode},信息:${res.statusMessage}`)); } }); }).on('error', err => { reject(err); }); }); } // 代理GitLab合并请求数据接口,必须登录 app.get('/api/gitlab/merge_requests', requireLogin, async (req, res) => { try { const state = req.query.state || 'merged'; const scope = req.query.scope || 'all'; // 默认获取所有范围 const gitlabUrl = 'http://10.20.24.40/api/v4'; const projectId = 'qh/qh'; const privateToken = 'glpat-MyrEkJTz7yEPKheyNds4'; let allMergeRequests = []; let page = 1; const perPage = 100; let hasMore = true; while (hasMore) { const encodedProjectId = encodeURIComponent(projectId); const url = `${gitlabUrl}/projects/${encodedProjectId}/merge_requests?scope=${scope}&state=${state}&page=${page}&per_page=${perPage}`; const mergeRequests = await httpGet(url, { 'PRIVATE-TOKEN': privateToken }); allMergeRequests = allMergeRequests.concat(mergeRequests); if (mergeRequests.length < perPage) { hasMore = false; } else { page++; } } res.json(allMergeRequests); } catch (error) { console.error('GitLab数据获取失败:', error); res.status(500).json({ error: '服务器内部错误,获取GitLab数据失败' }); } }); // 启动服务器 app.listen(PORT, '0.0.0.0', () => { console.log(`✅ Server running at http://0.0.0.0:${PORT}`); }); 后端代码
最新发布
06-15
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值