You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
3.6 KiB
3.6 KiB
RFC 127: 修复文件夹分类查询参数
状态: ✅ 已完成
创建时间: 2026-01-20
作者: System
类型: Bug 修复
问题描述
文件夹创建成功但页面不显示,前端报 CORS 错误。经调试发现:
- 后端代码 Bug:
FolderRepository.get_by_parent()方法缺少folder_category参数 - Docker 配置问题:容器未正确加载
.env文件中的 CORS 配置
错误信息
TypeError: FolderRepository.get_by_parent() takes from 3 to 5 positional arguments but 6 were given
根本原因
FolderService.get_folders() 调用 repository.get_by_parent() 时传递了 5 个参数:
folders = await self.repository.get_by_parent(
parent_id, user_id, folder_category, page, page_size
)
但 FolderRepository.get_by_parent() 只接受 4 个参数:
async def get_by_parent(
self,
parent_id: Optional[str],
owner_id: str,
page: int = 1,
page_size: int = 20
) -> List[Folder]:
解决方案
1. 修复 Repository 方法签名
文件: server/app/repositories/folder_repository.py
async def get_by_parent(
self,
parent_id: Optional[str],
owner_id: str,
folder_category: Optional[int] = None, # 新增参数
page: int = 1,
page_size: int = 20
) -> List[Folder]:
"""获取指定父文件夹下的子文件夹"""
conditions = [
Folder.parent_folder_id == parent_id,
Folder.owner_id == owner_id,
Folder.deleted_at.is_(None)
]
# 如果指定了 folder_category,添加过滤条件
if folder_category is not None:
conditions.append(Folder.folder_category == folder_category)
statement = select(Folder).where(
and_(*conditions)
).order_by(Folder.sort_order, Folder.created_at).offset((page - 1) * page_size).limit(page_size)
result = await self.session.exec(statement)
return list(result.all())
同样修复 count_by_parent() 方法:
async def count_by_parent(
self,
parent_id: Optional[str],
owner_id: str,
folder_category: Optional[int] = None # 新增参数
) -> int:
"""统计指定父文件夹下的子文件夹数量"""
conditions = [
Folder.parent_folder_id == parent_id,
Folder.owner_id == owner_id,
Folder.deleted_at.is_(None)
]
# 如果指定了 folder_category,添加过滤条件
if folder_category is not None:
conditions.append(Folder.folder_category == folder_category)
statement = select(func.count(Folder.id)).where(and_(*conditions))
result = await self.session.exec(statement)
return result.one()
2. 修复 Docker Compose 配置
文件: server/docker-compose.yml
app:
build:
context: .
dockerfile: Dockerfile
container_name: jointo-server-app
ports:
- "6170:6170"
volumes:
- .:/app
- /app/venv
env_file:
- .env # 添加此行
environment:
- DATABASE_URL=postgresql+asyncpg://postgres:postgres@postgres:5432/jointo
- REDIS_URL=redis://redis:6379/0
- MINIO_ENDPOINT=minio:9000
- CORS_ORIGINS=["http://localhost:6160","http://192.168.31.178:6160"] # 显式添加
测试验证
- ✅ 创建文件夹成功
- ✅ 文件夹正确显示在页面上
- ✅ API 请求无 CORS 错误
- ✅ 虚拟根系统正常工作
影响范围
server/app/repositories/folder_repository.pyserver/docker-compose.yml