yszl-mcp
Version:
Scenic Area Tourist Flow Query Server with official MCP SDK
88 lines (72 loc) • 2.14 kB
JavaScript
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);
});