Files
mokeeText/backend/app.py
2026-07-15 16:08:17 +08:00

63 lines
2.0 KiB
Python
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.
"""MoKeeText — FastAPI 入口"""
from fastapi import FastAPI, Request
from fastapi.middleware.cors import CORSMiddleware
from fastapi.staticfiles import StaticFiles
from fastapi.responses import FileResponse, Response
from logger import logger
from middleware.user_context import UserContextMiddleware
from routes.notes import router as notes_router
from routes.websites import router as websites_router
from routes.import_api import router as import_router
from routes.share import router as share_router
from routes.upload import router as upload_router
app = FastAPI(title="MoKeeText", version="2.1.0")
# CORS — 允许网关域名、前端域名、后端域名跨域
# 注意allow_credentials=True 时不能使用 allow_origins=["*"]
app.add_middleware(
CORSMiddleware,
allow_origins=[
"https://mokeetext.zgitm.com",
"https://mokeetext.server.zgitm.com", # 分享页 + 图片直连
"https://gw.server.zgitm.com",
"http://localhost:5173",
],
allow_methods=["*"],
allow_headers=["*"],
allow_credentials=True,
)
# 用户上下文中间件 — 在 CORS 之后注册,读取网关转发的 X-User-* 请求头
app.add_middleware(UserContextMiddleware)
@app.on_event("startup")
async def startup():
logger.info("MoKeeText 服务启动")
@app.on_event("shutdown")
async def shutdown():
logger.info("MoKeeText 服务关闭")
# 请求日志中间件
@app.middleware("http")
async def log_requests(request: Request, call_next):
response = await call_next(request)
logger.info(f"{request.method} {request.url.path}{response.status_code}")
return response
# 静态文件
app.mount("/static", StaticFiles(directory="static"), name="static")
# API 路由
app.include_router(notes_router)
app.include_router(websites_router)
app.include_router(import_router)
app.include_router(share_router)
app.include_router(upload_router)
@app.get("/favicon.ico")
async def favicon():
return FileResponse("static/favicon.ico") if __import__('os').path.exists("static/favicon.ico") else Response(status_code=204)