app.js 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  1. const express = require('express');
  2. const cors = require('cors');
  3. const bodyParser = require('body-parser');
  4. const app = express();
  5. const PORT = 8080;
  6. // 使用中间件
  7. app.use(cors()); // 允许跨域请求
  8. app.use(bodyParser.json()); // 解析JSON请求体
  9. // 会话存储
  10. const sessions = {};
  11. // 生成唯一会话ID
  12. function generateSessionId() {
  13. return 'session_' + Date.now() + '_' + Math.random().toString(36).substring(2, 15);
  14. }
  15. // 开始新会话
  16. app.post('/api/ai/travel/start', (req, res) => {
  17. const sessionId = generateSessionId();
  18. sessions[sessionId] = {
  19. id: sessionId,
  20. messages: [],
  21. createdAt: new Date()
  22. };
  23. console.log(`新会话已创建: ${sessionId}`);
  24. res.json({
  25. code: 200,
  26. sessionId: sessionId,
  27. msg: '欢迎使用AI旅行助手,请问有什么可以帮助您的?'
  28. });
  29. });
  30. // 聊天接口
  31. app.post('/api/ai/travel/chat', (req, res) => {
  32. const sessionId = req.headers.sessionid;
  33. const message = req.body.message;
  34. const logToConsole = req.body.logToConsole || req.headers['x-log-to-console'] === 'true';
  35. console.log(`收到消息请求: sessionId=${sessionId}, logToConsole=${logToConsole}`);
  36. // 检查会话是否存在
  37. if (!sessions[sessionId]) {
  38. console.log(`会话不存在: ${sessionId}`);
  39. return res.status(404).json({
  40. code: 404,
  41. msg: '会话不存在,请重新开始对话'
  42. });
  43. }
  44. // 记录消息
  45. sessions[sessionId].messages.push({
  46. role: 'user',
  47. content: message,
  48. timestamp: new Date()
  49. });
  50. // 在控制台输出消息
  51. if (logToConsole || message.includes('[LOG_TO_CONSOLE]') || message.includes('[CONSOLE_TEST]')) {
  52. console.log('\n======== 前端消息输出到控制台 ========');
  53. console.log(`会话ID: ${sessionId}`);
  54. console.log(`时间: ${new Date().toLocaleString()}`);
  55. console.log(`消息内容: ${message}`);
  56. console.log('======================================\n');
  57. }
  58. // 模拟AI回复
  59. const aiReply = `我已收到您的消息: "${message.replace(/\[LOG_TO_CONSOLE\]|\[CONSOLE_TEST\]/g, '')}"`;
  60. // 记录AI回复
  61. sessions[sessionId].messages.push({
  62. role: 'assistant',
  63. content: aiReply,
  64. timestamp: new Date()
  65. });
  66. // 返回成功响应
  67. res.json({
  68. code: 200,
  69. msg: '消息已发送',
  70. data: {
  71. reply: aiReply
  72. }
  73. });
  74. });
  75. // 获取状态接口
  76. app.get('/api/ai/travel/status', (req, res) => {
  77. const sessionId = req.headers.sessionid;
  78. // 检查会话是否存在
  79. if (!sessions[sessionId]) {
  80. return res.status(404).json({
  81. code: 404,
  82. msg: '会话不存在'
  83. });
  84. }
  85. // 获取最新的AI回复
  86. const messages = sessions[sessionId].messages;
  87. let lastAiMessage = null;
  88. for (let i = messages.length - 1; i >= 0; i--) {
  89. if (messages[i].role === 'assistant') {
  90. lastAiMessage = messages[i];
  91. break;
  92. }
  93. }
  94. res.json({
  95. code: 200,
  96. reply: lastAiMessage ? lastAiMessage.content : null,
  97. hasNewMessage: !!lastAiMessage
  98. });
  99. });
  100. // 结束会话
  101. app.post('/api/ai/travel/end', (req, res) => {
  102. const sessionId = req.headers.sessionid;
  103. // 检查会话是否存在
  104. if (sessions[sessionId]) {
  105. console.log(`结束会话: ${sessionId}`);
  106. delete sessions[sessionId];
  107. }
  108. res.json({
  109. code: 200,
  110. msg: '会话已结束'
  111. });
  112. });
  113. // 启动服务器
  114. app.listen(PORT, () => {
  115. console.log(`服务器已启动,监听端口: ${PORT}`);
  116. console.log(`API基础URL: http://localhost:${PORT}`);
  117. });