功能特性: - 3D地球动画与中国地图可视化 - 省份/城市/企业搜索功能 - 308家企业数据展示 - 响应式设计(PC端和移动端) - 企业详情页面与业务板块展示 - 官网新闻轮播图 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
94 lines
2.8 KiB
JavaScript
94 lines
2.8 KiB
JavaScript
const http = require('http');
|
||
const fs = require('fs');
|
||
const path = require('path');
|
||
|
||
const PORT = 8080;
|
||
|
||
// MIME类型映射
|
||
const mimeTypes = {
|
||
'.html': 'text/html',
|
||
'.css': 'text/css',
|
||
'.js': 'application/javascript',
|
||
'.json': 'application/json',
|
||
'.png': 'image/png',
|
||
'.jpg': 'image/jpeg',
|
||
'.jpeg': 'image/jpeg',
|
||
'.gif': 'image/gif',
|
||
'.svg': 'image/svg+xml',
|
||
'.ico': 'image/x-icon',
|
||
'.woff': 'font/woff',
|
||
'.woff2': 'font/woff2',
|
||
'.ttf': 'font/ttf',
|
||
'.csv': 'text/csv'
|
||
};
|
||
|
||
const server = http.createServer((req, res) => {
|
||
// 解析请求的URL并解码(支持中文文件名)
|
||
let filePath = '.' + decodeURIComponent(req.url);
|
||
if (filePath === './') {
|
||
filePath = './index.html';
|
||
}
|
||
|
||
// 获取文件扩展名
|
||
const extname = String(path.extname(filePath)).toLowerCase();
|
||
const contentType = mimeTypes[extname] || 'application/octet-stream';
|
||
|
||
// 读取文件
|
||
fs.readFile(filePath, (error, content) => {
|
||
if (error) {
|
||
if (error.code === 'ENOENT') {
|
||
// 文件不存在
|
||
res.writeHead(404, { 'Content-Type': 'text/html; charset=utf-8' });
|
||
res.end('<h1>404 - 文件未找到</h1>', 'utf-8');
|
||
} else {
|
||
// 服务器错误
|
||
res.writeHead(500);
|
||
res.end('服务器错误: ' + error.code, 'utf-8');
|
||
}
|
||
} else {
|
||
// 成功返回文件
|
||
res.writeHead(200, { 'Content-Type': contentType });
|
||
res.end(content, 'utf-8');
|
||
}
|
||
});
|
||
});
|
||
|
||
// 获取本机IP地址
|
||
const os = require('os');
|
||
function getLocalIP() {
|
||
const interfaces = os.networkInterfaces();
|
||
for (const name of Object.keys(interfaces)) {
|
||
for (const iface of interfaces[name]) {
|
||
if (iface.family === 'IPv4' && !iface.internal) {
|
||
return iface.address;
|
||
}
|
||
}
|
||
}
|
||
return 'localhost';
|
||
}
|
||
|
||
const localIP = getLocalIP();
|
||
|
||
server.listen(PORT, '0.0.0.0', () => {
|
||
console.log('');
|
||
console.log('========================================');
|
||
console.log('🚀 本地服务器已启动(局域网模式)!');
|
||
console.log('========================================');
|
||
console.log('');
|
||
console.log(`📍 本机访问: http://localhost:${PORT}`);
|
||
console.log(`📍 局域网访问: http://${localIP}:${PORT}`);
|
||
console.log('');
|
||
console.log('🌐 同一局域网内的其他设备可以通过局域网地址访问');
|
||
console.log('');
|
||
console.log('💡 提示: 按 Ctrl+C 停止服务器');
|
||
console.log('');
|
||
console.log('========================================');
|
||
console.log('');
|
||
});
|
||
|
||
// 优雅关闭
|
||
process.on('SIGINT', () => {
|
||
console.log('\n\n服务器已关闭');
|
||
process.exit(0);
|
||
});
|