expressServer/app.js

85 lines
2.2 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 cookieParser = require('cookie-parser')
const indexRouter = require('./routes/index')
const userRouter = require('./routes/userRouter')
const accountRouter = require('./routes/accountRouter')
// mongodb数据库连接
const { connectMongoDB } = require('./db/mongodbConfig')
const loginUtil = require('./utils/loginUtil')
const app = express()
// 导入env
require('dotenv').config()
const loginSecret = process.env.SESSION_SECRET
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',
secret: loginSecret,
resave: false,
saveUninitialized: false,
cookie: {
secure: false,
maxAge: 1000 * 60 * 10
}
})
)
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