ERPTurbo_Poster/server.mjs
2025-11-14 14:18:32 +08:00

65 lines
1.8 KiB
JavaScript

import express from 'express';
import bodyParser from 'body-parser';
import dotenv from 'dotenv';
// 配置 dotenv
dotenv.config();
import BrowserManager from './lib/browser.js';
import StorageManager from './lib/storage.js';
import {pdfHandler, posterHandler, statusHandler} from './lib/routes.js';
// 初始化存储管理器
const storageManager = new StorageManager(process.env);
// 初始化浏览器管理器
const browserManager = new BrowserManager();
await browserManager.initBrowser(2);
const app = express();
app.use(bodyParser.json({limit: '10mb'}));
// 提供上传文件的静态访问
app.use('/uploads', express.static('uploads'));
// 健康检查接口
app.get('/status', statusHandler);
// 添加安全头
app.use((req, res, next) => {
res.setHeader('X-Content-Type-Options', 'nosniff');
res.setHeader('X-Frame-Options', 'DENY');
res.setHeader('X-XSS-Protection', '1; mode=block');
next();
});
// 海报生成接口
app.post('/api/v1/poster', async function (req, res) {
// 基本的安全检查
if (!req.headers['content-type'] || !req.headers['content-type'].includes('application/json')) {
return res.status(400).json({error: 'Content-Type must be application/json'});
}
await posterHandler(
req,
res,
browserManager,
storageManager
);
});
// PDF生成接口
app.post('/api/v1/pdf', async function (req, res) {
// 基本的安全检查
if (!req.headers['content-type'] || !req.headers['content-type'].includes('application/json')) {
return res.status(400).json({error: 'Content-Type must be application/json'});
}
await pdfHandler(
req,
res,
browserManager,
storageManager
);
});
const port = process.env.PORT || 3000;
app.listen(port, () => console.log(`Puppeteer app listening on port ${port}!`));