const express = require('express'); require('dotenv').config(); const responseMiddleware = require('./src/middlewares/responseMiddleware'); const errorMiddleware = require('./src/middlewares/errorMiddleware'); const logsMiddleware = require('./src/middlewares/logsMiddleware'); const logger = require('./src/utils/logger'); const connectDB = require('./src/database/mongo'); const app = express(); const port = process.env.PORT || 3000; /** * 将日志记录器挂载到全局 */ global.logger = logger; /** * 连接到数据库 */ connectDB(); /** * 用于解析来自客户端的请求体中的 JSON 数据 */ app.use(express.json()); /** * 静态文件资源目录 */ app.use(express.static('public')); /** * 使用Morgan中间件来记录HTTP请求日志 */ app.use(logsMiddleware); /** * 添加统一响应API数据格式 */ app.use(responseMiddleware); /** * 添加路由API接口 * 可以支持多个版本 */ app.use('/api/v1', require('./src/routes/v1/index')); //app.use('/api/v2', require('./src/routes/v2/index')); /** * 处理未匹配到的路由 */ app.use((req, res, next) => { res.sendApiResponse(404, null, 'Route not found') }); /** * 全局处理异常 -- 尽量通过 try catch 后的 next(err),会触发这里 */ app.use(errorMiddleware) /** * 全局异常处理器 -- 没有合理的使用try catch时,程序中断了,会触发这里 */ process.on('uncaughtException', (err) => { console.error(err.stack); logger.error(err.stack); // 记录错误到日志文件或日志记录系统 // 发送通知,例如通过电子邮件、短信或Slack等方式 // 重启应用程序,例如使用自动重启工具或编写脚本来重新启动应用 // 关闭服务器 process.exit(1); }); /** * 监听服务端口 */ app.listen(port, () => { console.log(`Server is running on port ${port}`); });