const express = require('express'); const router = express.Router(); const roomStore = require('../store/roomStore'); const { validateRoom } = require('../middleware/validate'); const { generateStreamUrls } = require('../utils/streamUrl'); const { getActiveStreamKeys } = require('../utils/srsHttpApi'); const getRequestHost = (req) => { const hostHeader = req && req.get ? req.get('host') : null; const fromHeader = hostHeader ? String(hostHeader).split(':')[0] : null; return req && req.hostname ? req.hostname : fromHeader; }; // GET /api/rooms - 获取所有房间 router.get('/', async (req, res) => { const rooms = roomStore.getAll(); const activeStreamKeys = await getActiveStreamKeys({ app: 'live' }); const requestHost = getRequestHost(req); res.json({ success: true, data: rooms.map(room => ({ ...room, isLive: activeStreamKeys.size ? activeStreamKeys.has(room.streamKey) : room.isLive, streamUrls: generateStreamUrls(room.streamKey, requestHost) })) }); }); // POST /api/rooms - 创建房间 router.post('/', validateRoom, (req, res) => { const { title, streamerName } = req.body; const room = roomStore.create({ title, streamerName }); const requestHost = getRequestHost(req); res.status(201).json({ success: true, data: { ...room, streamUrls: generateStreamUrls(room.streamKey, requestHost) } }); }); // GET /api/rooms/:id - 获取单个房间 router.get('/:id', async (req, res) => { const room = roomStore.getById(req.params.id); const requestHost = getRequestHost(req); if (!room) { return res.status(404).json({ success: false, error: { code: 'ROOM_NOT_FOUND', message: '房间不存在' } }); } res.json({ success: true, data: { ...room, isLive: (await getActiveStreamKeys({ app: 'live' })).has(room.streamKey) || room.isLive, streamUrls: generateStreamUrls(room.streamKey, requestHost) } }); }); // DELETE /api/rooms/:id - 删除房间 router.delete('/:id', (req, res) => { const deleted = roomStore.delete(req.params.id); if (!deleted) { return res.status(404).json({ success: false, error: { code: 'ROOM_NOT_FOUND', message: '房间不存在' } }); } res.json({ success: true }); }); module.exports = router;