rtc-voice-chat/java-mock/routes/aiProxyRoutes.js
2026-04-02 20:15:15 +08:00

56 lines
2.1 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

const express = require('express');
const axios = require('axios');
const authMiddleware = require('../middleware/auth');
const { buildInternalHeaders } = require('../middleware/internalSign');
const router = express.Router();
const PYTHON_URL = () => process.env.PYTHON_BACKEND_URL || 'http://localhost:3001';
/**
* 通用代理函数:带 HMAC 签名转发到 Python
*/
async function forwardToPython(pythonPath, queryString, body, userId, res, userInfo = {}) {
const url = `${PYTHON_URL()}${pythonPath}${queryString ? `?${queryString}` : ''}`;
const headers = {
'Content-Type': 'application/json',
...buildInternalHeaders(userId, userInfo),
};
console.log('[→ Python]', url);
console.log('[→ Headers]', JSON.stringify(headers, null, 2));
console.log('[→ Body]', JSON.stringify(body, null, 2));
try {
const resp = await axios.post(url, body, { headers, timeout: 30000 });
return res.status(resp.status).json(resp.data);
} catch (err) {
if (err.response) {
return res.status(err.response.status).json(err.response.data);
}
console.error('[aiProxy] 转发失败:', err.message);
return res.status(502).json({ code: 502, message: `无法连接 Python 后端: ${err.message}` });
}
}
// POST /api/ai/getScenes
router.post('/getScenes', authMiddleware, async (req, res) => {
await forwardToPython('/getScenes', 'Action=getScenes', req.body, req.user.userId, res, req.user);
});
// POST /api/ai/proxy?Action=StartVoiceChat|StopVoiceChat
router.post('/proxy', authMiddleware, async (req, res) => {
const action = req.query.Action;
if (!action) {
return res.status(400).json({ code: 400, message: 'Action 参数不能为空' });
}
await forwardToPython('/proxy', `Action=${action}`, req.body, req.user.userId, res, req.user);
});
// POST /api/ai/session/history — 存储历史对话上下文到 Pythonstart 前调用)
router.post('/session/history', authMiddleware, async (req, res) => {
await forwardToPython('/api/session/history', '', req.body, req.user.userId, res, req.user);
});
module.exports = router;