修复节点市场无法获取节点列表的问题

This commit is contained in:
jingrow 2025-11-03 01:29:30 +08:00
parent c26391d874
commit 0a54e1500e

View File

@ -209,7 +209,7 @@ async def get_node_marketplace(
): ):
"""获取节点市场数据,支持搜索、分页和排序""" """获取节点市场数据,支持搜索、分页和排序"""
try: try:
url = f"{get_jingrow_cloud_url()}/api/action/jcloud.api.local_node.get_local_nodes" url = f"{get_jingrow_cloud_url()}/api/action/jcloud.api.jlocal.get_local_node_list"
# 构建过滤条件 # 构建过滤条件
filters = {"public": 1} filters = {"public": 1}
@ -217,16 +217,14 @@ async def get_node_marketplace(
filters["title"] = ["like", f"%{search}%"] filters["title"] = ["like", f"%{search}%"]
filters["node_type"] = ["like", f"%{search}%"] filters["node_type"] = ["like", f"%{search}%"]
# 1. 先获取总数 # 1. 先获取总数(不分页)
total_params = { total_params = {
'filters': json.dumps(filters, ensure_ascii=False), 'filters': json.dumps(filters, ensure_ascii=False),
'limit_start': 0, 'limit_start': 0,
'limit_page_length': 0 'limit_page_length': 0 # 不限制数量,获取所有数据来计算总数
} }
headers = get_jingrow_cloud_api_headers() headers = get_jingrow_cloud_api_headers()
try:
total_response = requests.get(url, params=total_params, headers=headers, timeout=20) total_response = requests.get(url, params=total_params, headers=headers, timeout=20)
total_count = 0 total_count = 0
@ -254,6 +252,7 @@ async def get_node_marketplace(
data = response.json() data = response.json()
nodes = data.get('message', []) nodes = data.get('message', [])
# 返回分页格式的数据
return { return {
"items": nodes, "items": nodes,
"total": total_count, "total": total_count,
@ -261,34 +260,10 @@ async def get_node_marketplace(
"page_size": page_size "page_size": page_size
} }
else: else:
# 如果API不存在或失败返回空列表 raise HTTPException(status_code=response.status_code, detail="获取节点市场数据失败")
logger.warning(f"获取节点市场数据失败: HTTP {response.status_code}, 返回空列表")
return {
"items": [],
"total": 0,
"page": page,
"page_size": page_size
}
except requests.exceptions.RequestException as e:
# 网络错误或API不存在时返回空列表
logger.warning(f"节点市场API请求失败: {str(e)}, 返回空列表")
return {
"items": [],
"total": 0,
"page": page,
"page_size": page_size
}
except Exception as e: except Exception as e:
logger.error(f"获取节点市场数据异常: {str(e)}") raise HTTPException(status_code=500, detail=f"获取节点市场数据失败: {str(e)}")
logger.error(f"Traceback: {traceback.format_exc()}")
# 即使出错也返回空列表而不是抛出500错误
return {
"items": [],
"total": 0,
"page": page,
"page_size": page_size
}
@router.get("/jingrow/check-node/{node_type}") @router.get("/jingrow/check-node/{node_type}")