Files
AIGC/demo/frontend/dev-server.js
2025-10-21 16:50:33 +08:00

82 lines
2.1 KiB
JavaScript
Raw Permalink 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 http = require('http');
const fs = require('fs');
const path = require('path');
const PORT = 3000;
const server = http.createServer((req, res) => {
console.log(`${req.method} ${req.url}`);
// 设置CORS头
res.setHeader('Access-Control-Allow-Origin', '*');
res.setHeader('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, OPTIONS');
res.setHeader('Access-Control-Allow-Headers', 'Content-Type, Authorization');
if (req.method === 'OPTIONS') {
res.writeHead(200);
res.end();
return;
}
let filePath = req.url === '/' ? '/index.html' : req.url;
// 如果是API请求代理到后端
if (req.url.startsWith('/api')) {
const http = require('http');
const options = {
hostname: 'localhost',
port: 8080,
path: req.url,
method: req.method,
headers: req.headers
};
const proxyReq = http.request(options, (proxyRes) => {
res.writeHead(proxyRes.statusCode, proxyRes.headers);
proxyRes.pipe(res);
});
req.pipe(proxyReq);
return;
}
// 静态文件服务
const fullPath = path.join(__dirname, 'dist', filePath);
fs.readFile(fullPath, (err, data) => {
if (err) {
res.writeHead(404, { 'Content-Type': 'text/html' });
res.end(`
<!DOCTYPE html>
<html>
<head>
<title>开发服务器</title>
</head>
<body>
<h1>开发服务器正在运行</h1>
<p>端口: ${PORT}</p>
<p>请先运行 <code>npm run build</code> 构建项目</p>
</body>
</html>
`);
return;
}
const ext = path.extname(fullPath);
const contentType = {
'.html': 'text/html',
'.js': 'text/javascript',
'.css': 'text/css',
'.json': 'application/json'
}[ext] || 'text/plain';
res.writeHead(200, { 'Content-Type': contentType });
res.end(data);
});
});
server.listen(PORT, '0.0.0.0', () => {
console.log(`🚀 开发服务器运行在 http://localhost:${PORT}`);
console.log(`🌐 网络访问: http://0.0.0.0:${PORT}`);
});