UNPKG

yszl-mcp

Version:

Scenic Area Tourist Flow Query Server with official MCP SDK

88 lines (72 loc) 2.14 kB
#!/usr/bin/env node import dotenv from 'dotenv'; import { fileURLToPath } from 'url'; import { dirname, join } from 'path'; import { createWriteStream, mkdirSync } from 'fs'; /** * 景区客流查询服务启动脚本 */ // 设置环境变量 dotenv.config(); // 获取当前文件所在目录 const __filename = fileURLToPath(import.meta.url); const __dirname = dirname(__filename); // 创建日志目录 const logsDir = join(__dirname, '../logs'); try { mkdirSync(logsDir, { recursive: true }); } catch (err) { if (err.code !== 'EEXIST') { console.error('Failed to create logs directory:', err); process.exit(1); } } // 创建日志文件流 const logStream = createWriteStream(join(logsDir, 'server.log'), { flags: 'a' }); // 重写 console.log 和 console.error const originalConsoleLog = console.log; const originalConsoleError = console.error; // 判断是否是 JSON 字符串 function isJsonString(str) { try { JSON.parse(str); return true; } catch (e) { return false; } } console.log = function(...args) { const message = args.join(' '); logStream.write(`[${new Date().toISOString()}] [INFO] ${message}\n`); // 如果是 JSON 字符串,输出到 stdout,否则输出到 stderr if (isJsonString(message)) { originalConsoleLog(message); } else { originalConsoleError(message); } }; console.error = function(...args) { const message = args.join(' '); logStream.write(`[${new Date().toISOString()}] [ERROR] ${message}\n`); originalConsoleError(message); }; // 捕获未捕获的异常 process.on('uncaughtException', (err) => { console.error('Uncaught Exception:', err); process.exit(1); }); // 捕获未处理的 Promise 拒绝 process.on('unhandledRejection', (reason, promise) => { console.error('Unhandled Rejection at:', promise, 'reason:', reason); process.exit(1); }); // 设置端口 const PORT = process.env.PORT || 3000; process.env.PORT = PORT; // 导入主应用 import { startServer } from '../index.js'; // 启动服务器 startServer().catch(error => { console.error('启动服务器时出错:', error); process.exit(1); });