From 0a54e1500e9503db76e0f195d586d828366fa5a8 Mon Sep 17 00:00:00 2001 From: jingrow Date: Mon, 3 Nov 2025 01:29:30 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E8=8A=82=E7=82=B9=E5=B8=82?= =?UTF-8?q?=E5=9C=BA=E6=97=A0=E6=B3=95=E8=8E=B7=E5=8F=96=E8=8A=82=E7=82=B9?= =?UTF-8?q?=E5=88=97=E8=A1=A8=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/jingrow/jingrow/api/node_management.py | 93 ++++++++------------- 1 file changed, 34 insertions(+), 59 deletions(-) diff --git a/apps/jingrow/jingrow/api/node_management.py b/apps/jingrow/jingrow/api/node_management.py index 7bcb59d..03dafe1 100644 --- a/apps/jingrow/jingrow/api/node_management.py +++ b/apps/jingrow/jingrow/api/node_management.py @@ -209,7 +209,7 @@ async def get_node_marketplace( ): """获取节点市场数据,支持搜索、分页和排序""" 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} @@ -217,78 +217,53 @@ async def get_node_marketplace( filters["title"] = ["like", f"%{search}%"] filters["node_type"] = ["like", f"%{search}%"] - # 1. 先获取总数 + # 1. 先获取总数(不分页) total_params = { 'filters': json.dumps(filters, ensure_ascii=False), 'limit_start': 0, - 'limit_page_length': 0 + 'limit_page_length': 0 # 不限制数量,获取所有数据来计算总数 } headers = get_jingrow_cloud_api_headers() + total_response = requests.get(url, params=total_params, headers=headers, timeout=20) - try: - total_response = requests.get(url, params=total_params, headers=headers, timeout=20) + total_count = 0 + if total_response.status_code == 200: + total_data = total_response.json() + total_count = len(total_data.get('message', [])) + + # 2. 获取分页数据 + params = { + 'filters': json.dumps(filters, ensure_ascii=False) + } + + # 排序参数 + if sort_by: + params['order_by'] = sort_by + + # 分页参数 + limit_start = (page - 1) * page_size + params['limit_start'] = limit_start + params['limit_page_length'] = page_size + + response = requests.get(url, params=params, headers=headers, timeout=20) + + if response.status_code == 200: + data = response.json() + nodes = data.get('message', []) - total_count = 0 - if total_response.status_code == 200: - total_data = total_response.json() - total_count = len(total_data.get('message', [])) - - # 2. 获取分页数据 - params = { - 'filters': json.dumps(filters, ensure_ascii=False) - } - - # 排序参数 - if sort_by: - params['order_by'] = sort_by - - # 分页参数 - limit_start = (page - 1) * page_size - params['limit_start'] = limit_start - params['limit_page_length'] = page_size - - response = requests.get(url, params=params, headers=headers, timeout=20) - - if response.status_code == 200: - data = response.json() - nodes = data.get('message', []) - - return { - "items": nodes, - "total": total_count, - "page": page, - "page_size": page_size - } - else: - # 如果API不存在或失败,返回空列表 - 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, + "items": nodes, + "total": total_count, "page": page, "page_size": page_size } + else: + raise HTTPException(status_code=response.status_code, detail="获取节点市场数据失败") except Exception as e: - logger.error(f"获取节点市场数据异常: {str(e)}") - logger.error(f"Traceback: {traceback.format_exc()}") - # 即使出错也返回空列表,而不是抛出500错误 - return { - "items": [], - "total": 0, - "page": page, - "page_size": page_size - } + raise HTTPException(status_code=500, detail=f"获取节点市场数据失败: {str(e)}") @router.get("/jingrow/check-node/{node_type}")