Skip to main content
Glama

Office MCP Server

by walkingzzzy
errorHandler.ts1.68 kB
import { Request, Response, NextFunction } from 'express'; import { ApiResponse } from '../types'; import logger from '../utils/logger'; /** * 自定义错误类 */ export class AppError extends Error { public statusCode: number; public isOperational: boolean; constructor(message: string, statusCode: number = 500) { super(message); this.statusCode = statusCode; this.isOperational = true; Error.captureStackTrace(this, this.constructor); } } /** * 错误处理中间件 */ export const errorHandler = ( err: Error | AppError, req: Request, res: Response, next: NextFunction ) => { let statusCode = 500; let message = '服务器内部错误'; if (err instanceof AppError) { statusCode = err.statusCode; message = err.message; } else if (err instanceof Error) { message = err.message; } // 记录错误日志 logger.error(`错误: ${message}`, { statusCode, stack: err.stack, url: req.originalUrl, method: req.method, }); // 返回错误响应 const response: ApiResponse = { success: false, error: message, message: '请求失败', }; res.status(statusCode).json(response); }; /** * 404处理中间件 */ export const notFoundHandler = (req: Request, res: Response) => { const response: ApiResponse = { success: false, error: '路由不存在', message: `无法找到 ${req.method} ${req.originalUrl}`, }; res.status(404).json(response); }; /** * 异步路由包装器 */ export const asyncHandler = (fn: Function) => { return (req: Request, res: Response, next: NextFunction) => { Promise.resolve(fn(req, res, next)).catch(next); }; };

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/walkingzzzy/office-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server