app.js 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. require('dotenv').config();
  2. const express = require('express');
  3. const cors = require('cors');
  4. const helmet = require('helmet');
  5. const morgan = require('morgan');
  6. const { pool } = require('./config/db');
  7. const routes = require('./routes'); // 确保这里导入的是整合所有路由的入口文件
  8. const errorHandler = require('./middlewares/error');
  9. const app = express();
  10. // CORS 配置
  11. const corsOptions = {
  12. origin: 'http://localhost:5173',
  13. credentials: true,
  14. methods: ['GET', 'POST', 'PUT', 'DELETE', 'OPTIONS'],
  15. allowedHeaders: ['Content-Type', 'Authorization', 'X-Requested-With'],
  16. optionsSuccessStatus: 200
  17. };
  18. // 中间件配置
  19. app.use(cors(corsOptions)); // 只保留这一个 CORS 中间件
  20. app.options('*', cors(corsOptions)); // 预检请求处理
  21. app.use(helmet());
  22. app.use(morgan('dev'));
  23. app.use(express.json());
  24. app.use(express.urlencoded({ extended: true }));
  25. // 测试路由
  26. app.get('/test-db', async (req, res) => {
  27. try {
  28. const [rows] = await pool.query('SELECT 1 + 1 AS result');
  29. res.json({
  30. success: true,
  31. data: rows[0],
  32. message: '数据库连接正常'
  33. });
  34. } catch (error) {
  35. console.error('数据库连接测试失败:', error);
  36. res.status(500).json({
  37. success: false,
  38. error: error.message
  39. });
  40. }
  41. });
  42. // 路由注册 (关键修正点)
  43. // 注意:这里只需要使用 routes,不需要单独再挂载 jobsRouter
  44. // 因为 routes/index.js 应该已经整合了所有子路由
  45. app.use('/api', routes);
  46. // 错误处理
  47. app.use(errorHandler);
  48. // 404 处理
  49. app.use((req, res) => {
  50. res.status(404).json({
  51. success: false,
  52. error: 'Endpoint not found'
  53. });
  54. });
  55. // 启动服务器
  56. const PORT = process.env.PORT || 3000;
  57. app.listen(PORT, () => {
  58. console.log(`Server running on port ${PORT}`);
  59. console.log(`测试地址: http://localhost:${PORT}/test-db`);
  60. });
  61. module.exports = app;