Files
webRtc/WebApp/src/server.ts
2026-04-11 00:03:30 +08:00

90 lines
3.2 KiB
TypeScript
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.
import * as express from 'express';
import * as path from 'path';
import * as fs from 'fs';
import * as morgan from 'morgan';
import signaling from './signaling';
import { log, LogLevel } from './log';
import Options from './class/options';
import { reset as resetHandler }from './class/httphandler';
import { initSwagger } from './swagger';
const cors = require('cors');
const multer = require('multer');
export const createServer = (config: Options): express.Express => {
const app: express.Express = express();
resetHandler(config.mode);
// logging http access
if (config.logging != "none") {
app.use(morgan(config.logging));
}
// const signal = require('./signaling');
app.use(cors({origin: '*'}));
app.use(express.urlencoded({ extended: true }));
app.use(express.json());
app.get('/config', (req, res) => res.json({ useWebSocket: config.type == 'websocket', startupMode: config.mode, logging: config.logging }));
app.use('/signaling', signaling);
app.use(express.static(path.join(__dirname, '../client/public')));
app.use('/module', express.static(path.join(__dirname, '../client/src')));
app.get('/', (req, res) => {
const indexPagePath: string = path.join(__dirname, '../client/public/index.html');
fs.access(indexPagePath, (err) => {
if (err) {
log(LogLevel.warn, `Can't find file ' ${indexPagePath}`);
res.status(404).send(`Can't find file ${indexPagePath}`);
} else {
res.sendFile(indexPagePath);
}
});
});
// 初始化Swagger
initSwagger(app, config);
// 配置multer存储
const storage = multer.diskStorage({
destination: function (req: any, file: any, cb: (error: Error | null, destination: string) => void) {
// 确保上传目录存在
const uploadDir = path.join(__dirname, '../client/public/uploads/avatars');
if (!fs.existsSync(uploadDir)) {
fs.mkdirSync(uploadDir, { recursive: true });
}
cb(null, uploadDir);
},
filename: function (req: any, file: any, cb: (error: Error | null, filename: string) => void) {
// 临时使用原始文件名稍后在API处理中重命名
cb(null, file.originalname);
}
});
const upload = multer({ storage: storage });
// 头像上传API
app.post('/api/upload/avatar', upload.single('avatar'), (req: any, res: express.Response) => {
if (!req.file) {
return res.status(400).json({ success: false, message: 'No file uploaded' });
}
const userId = req.body.userId || 'unknown';
const ext = path.extname(req.file.originalname);
const oldPath = req.file.path;
const newFilename = `${userId}${ext}`;
const newPath = path.join(path.dirname(oldPath), newFilename);
// 重命名文件
fs.rename(oldPath, newPath, (err) => {
if (err) {
console.error('Error renaming file:', err);
return res.status(500).json({ success: false, message: '文件重命名失败' });
}
const avatarUrl = `/uploads/avatars/${newFilename}`;
res.json({ success: true, avatarUrl: avatarUrl });
});
});
// 确保uploads目录可访问
app.use('/uploads', express.static(path.join(__dirname, '../client/public/uploads')));
return app;
};