expressServer/app.js
LingandRX f7d28672b7 feat(session): 使用 Redis 存储会话数据
- 新增 Redis 配置和连接逻辑
- 更新 express-session 配置,使用 RedisStore 存储会话
- 修改 .env 和 .gitignore 文件,添加 Redis 相关配置
- 更新用户登录和会话管理相关代码
2024-12-30 22:10:51 +08:00

94 lines
2.5 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

const createError = require('http-errors')
const express = require('express')
const path = require('path')
const logger = require('morgan')
const cors = require('cors')
const session = require('express-session')
const { RedisStore } = require('connect-redis')
const Redis = require('ioredis')
const cookieParser = require('cookie-parser')
const indexRouter = require('./routes/index')
const userRouter = require('./routes/userRouter')
const accountRouter = require('./routes/accountRouter')
require('dotenv').config()
// mongodb数据库连接
const { connectMongoDB } = require('./config/mongodbConfig')
const loginUtil = require('./utils/loginUtil')
// 初始化 Redis 客户端
const redisClient = new Redis({
host: process.env.REDIS_HOST,
port: process.env.REDIS_PORT || 6379,
password: process.env.REDIS_PASSWORD,
db: 0
})
const app = express()
app.use(logger('dev'))
app.use(express.json())
app.use(express.urlencoded({ extended: false }))
app.use(express.static(path.join(__dirname, 'public')))
app.use(cookieParser())
app.use(
session({
name: 'identityKey',
store: new RedisStore({ client: redisClient }), // 正确的方式,不要使用 new RedisStore(),直接传递配置
secret: process.env.SESSION_SECRET,
resave: false,
saveUninitialized: false,
cookie: {
secure: false,
httpOnly: true,
maxAge: 24 * 60 * 60 * 1000
}
})
)
const corsOptions = {
origin: 'http://localhost:5173', // 指定允许的源
credentials: true, // 允许发送凭据(如 cookies
optionsSuccessStatus: 200 // 一些旧的浏览器IE11, various SmartTVs需要这个
}
app.use(cors(corsOptions))
async function startServer() {
try {
await connectMongoDB()
} catch (error) {
console.error('Server error:', error)
process.exit(1)
}
}
startServer()
app.use('/', indexRouter)
app.use('/user', loginUtil.authenticateSession, userRouter)
app.use('/account', accountRouter)
// catch 404 and forward to error handler
app.use(function (req, res, next) {
next(createError(404))
})
// error handler
app.use(function (err, req, res, next) {
// set locals, only providing error in development
res.locals.message = err.message
res.locals.error = req.app.get('env') === 'development' ? err : {}
// render the error page
res.status(err.status || HTTP_STATUS.INTERNAL_SERVER_ERROR)
res.json({
error: true,
message: err.message || 'Something went wrong',
// 只在开发环境下返回堆栈信息
...(req.app.get('env') === 'development' ? { stack: err.stack } : {})
})
})
module.exports = app