app.js 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  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. // 中间件
  11. app.use(cors());
  12. app.use(helmet());
  13. app.use(morgan('dev'));
  14. app.use(express.json());
  15. app.use(express.urlencoded({ extended: true }));
  16. app.use(cors({
  17. origin: process.env.FRONTEND_URL || 'http://localhost:5173', // 假设 Vue 运行在 5173
  18. methods: ['GET', 'POST', 'PUT', 'DELETE', 'PATCH'],
  19. allowedHeaders: ['Content-Type', 'Authorization']
  20. }));
  21. // 测试数据库连接的路由
  22. app.get('/test-db', async (req, res) => {
  23. try {
  24. const [rows] = await pool.query('SELECT 1 + 1 AS result');
  25. res.json({
  26. success: true,
  27. data: rows[0],
  28. message: '数据库连接正常'
  29. });
  30. } catch (error) {
  31. console.error('数据库连接测试失败:', error);
  32. res.status(500).json({
  33. success: false,
  34. error: error.message,
  35. code: error.code, // 添加数据库错误代码
  36. stack: process.env.NODE_ENV === 'development' ? error.stack : undefined
  37. });
  38. }
  39. });
  40. // 注册路由
  41. app.use('/api', routes);
  42. // 错误处理中间件(必须放在所有路由之后)
  43. app.use(errorHandler);
  44. // 404 处理
  45. app.use((req, res) => {
  46. res.status(404).json({
  47. success: false,
  48. error: 'Endpoint not found'
  49. });
  50. });
  51. // 启动服务器
  52. const PORT = process.env.PORT || 3000;
  53. app.listen(PORT, () => {
  54. console.log(`Server running on port ${PORT}`);
  55. console.log(`测试数据库连接: http://localhost:${PORT}/test-db`);
  56. });
  57. module.exports = app;