index.js 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. const express = require('express');
  2. require('dotenv').config();
  3. const responseMiddleware = require('./src/middlewares/responseMiddleware');
  4. const errorMiddleware = require('./src/middlewares/errorMiddleware');
  5. const logsMiddleware = require('./src/middlewares/logsMiddleware');
  6. const logger = require('./src/utils/logger');
  7. const connectDB = require('./src/database/mongo');
  8. const app = express();
  9. const port = process.env.PORT || 3000;
  10. /**
  11. * 将日志记录器挂载到全局
  12. */
  13. global.logger = logger;
  14. /**
  15. * 连接到数据库
  16. */
  17. connectDB();
  18. /**
  19. * 用于解析来自客户端的请求体中的 JSON 数据
  20. */
  21. app.use(express.json());
  22. /**
  23. * 静态文件资源目录
  24. */
  25. app.use(express.static('public'));
  26. /**
  27. * 使用Morgan中间件来记录HTTP请求日志
  28. */
  29. app.use(logsMiddleware);
  30. /**
  31. * 添加统一响应API数据格式
  32. */
  33. app.use(responseMiddleware);
  34. /**
  35. * 添加路由API接口
  36. * 可以支持多个版本
  37. */
  38. app.use('/api/v1', require('./src/routes/v1/index'));
  39. //app.use('/api/v2', require('./src/routes/v2/index'));
  40. /**
  41. * 处理未匹配到的路由
  42. */
  43. app.use((req, res, next) => {
  44. res.sendApiResponse(404, null, 'Route not found')
  45. });
  46. /**
  47. * 全局处理异常 -- 尽量通过 try catch 后的 next(err),会触发这里
  48. */
  49. app.use(errorMiddleware)
  50. /**
  51. * 全局异常处理器 -- 没有合理的使用try catch时,程序中断了,会触发这里
  52. */
  53. process.on('uncaughtException', (err) => {
  54. console.error(err.stack);
  55. logger.error(err.stack);
  56. // 记录错误到日志文件或日志记录系统
  57. // 发送通知,例如通过电子邮件、短信或Slack等方式
  58. // 重启应用程序,例如使用自动重启工具或编写脚本来重新启动应用
  59. // 关闭服务器
  60. process.exit(1);
  61. });
  62. /**
  63. * 监听服务端口
  64. */
  65. app.listen(port, () => {
  66. console.log(`Server is running on port ${port}`);
  67. });