Skip to content

Commit f7b6018

Browse files
committed
build: v3.2.0-beta6
1 parent 5e386cd commit f7b6018

File tree

4 files changed

+42
-11
lines changed

4 files changed

+42
-11
lines changed

README.md

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
<img src="docs/nodepassdash-logo.svg" alt="NodePassDash" height="80">
33
</div>
44

5-
![Version](https://img.shields.io/badge/version-3.2.0--beta5-blue.svg)
5+
![Version](https://img.shields.io/badge/version-3.2.0--beta6-blue.svg)
66
![GitHub license](https://img.shields.io/github/license/NodePassProject/NodePassDash)
77

88
NodePassDash是一个现代化的 NodePass 管理界面,基于 Go 后端 + React + Vite、HeroUI 和 TypeScript 构建。提供实时隧道监控、流量统计和端点管理功能。
@@ -168,6 +168,16 @@ docker run -d \
168168
- 💬 社区讨论: [Telegram 群组](https://t.me/NodePassGroup)
169169
- 📢 频道: [Telegram 频道](https://t.me/NodePassChannel)
170170

171+
## 🤝 Sponsors
172+
173+
<table>
174+
<tr>
175+
<td width="240" align="center">
176+
<a href="https://vps.town"><img src="https://cdn.yobc.de/assets/vpstown.png"></a>
177+
</td>
178+
</tr>
179+
</table>
180+
171181
---
172182

173183
⭐ 如果这个项目对你有帮助,请给我们一个 Star!

internal/services/service.go

Lines changed: 29 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import (
88
"NodePassDash/internal/tunnel"
99
"encoding/json"
1010
"fmt"
11+
"strings"
1112
"time"
1213

1314
"gorm.io/gorm"
@@ -375,39 +376,59 @@ func (s *ServiceImpl) DissolveService(sid string) error {
375376
// 清空客户端实例的 peer 信息
376377
if service.ClientInstanceId != nil && service.ClientEndpointId != nil {
377378
if _, err := nodepass.UpdateInstancePeers(*service.ClientEndpointId, *service.ClientInstanceId, emptyPeer); err != nil {
378-
return fmt.Errorf("清空客户端实例peer信息失败: %w", err)
379+
// 如果是404错误,说明实例已被删除,忽略该错误
380+
if !strings.Contains(err.Error(), "404") {
381+
return fmt.Errorf("清空客户端实例peer信息失败: %w", err)
382+
}
383+
log.Warnf("[Service] 客户端实例不存在,可能已被删除: instanceID=%s, endpointID=%d", *service.ClientInstanceId, *service.ClientEndpointId)
379384
}
380385

381386
// 清空数据库中客户端隧道的 peer 字段和 service_sid
382387
// 使用 Updates 而不是 Update,以正确触发 JSON 序列化
388+
// 如果隧道记录不存在(可能已被删除),Updates 不会报错,只是不更新任何记录
383389
if peerJSON, err := json.Marshal(emptyPeer); err == nil {
384-
if err := s.db.Model(&models.Tunnel{}).
390+
result := s.db.Model(&models.Tunnel{}).
385391
Where("instance_id = ?", *service.ClientInstanceId).
386392
Updates(map[string]interface{}{
387393
"peer": string(peerJSON),
388394
"service_sid": nil, // 清空 service_sid
389-
}).Error; err != nil {
390-
return fmt.Errorf("清空客户端隧道peer字段失败: %w", err)
395+
})
396+
if result.Error != nil {
397+
return fmt.Errorf("清空客户端隧道peer字段失败: %w", result.Error)
398+
}
399+
// 如果没有更新任何记录,说明隧道可能已被删除,记录警告但不报错
400+
if result.RowsAffected == 0 {
401+
log.Warnf("[Service] 客户端隧道记录不存在,可能已被删除: instanceID=%s", *service.ClientInstanceId)
391402
}
392403
}
393404
}
394405

395406
// 清空服务端实例的 peer 信息(如果存在)
396407
if service.ServerInstanceId != nil && service.ServerEndpointId != nil {
397408
if _, err := nodepass.UpdateInstancePeers(*service.ServerEndpointId, *service.ServerInstanceId, emptyPeer); err != nil {
398-
return fmt.Errorf("清空服务端实例peer信息失败: %w", err)
409+
// 如果是404错误,说明实例已被删除,忽略该错误
410+
if !strings.Contains(err.Error(), "404") {
411+
return fmt.Errorf("清空服务端实例peer信息失败: %w", err)
412+
}
413+
log.Warnf("[Service] 服务端实例不存在,可能已被删除: instanceID=%s, endpointID=%d", *service.ServerInstanceId, *service.ServerEndpointId)
399414
}
400415

401416
// 清空数据库中服务端隧道的 peer 字段和 service_sid
402417
// 使用 Updates 而不是 Update,以正确触发 JSON 序列化
418+
// 如果隧道记录不存在(可能已被删除),Updates 不会报错,只是不更新任何记录
403419
if peerJSON, err := json.Marshal(emptyPeer); err == nil {
404-
if err := s.db.Model(&models.Tunnel{}).
420+
result := s.db.Model(&models.Tunnel{}).
405421
Where("instance_id = ?", *service.ServerInstanceId).
406422
Updates(map[string]interface{}{
407423
"peer": string(peerJSON),
408424
"service_sid": nil, // 清空 service_sid
409-
}).Error; err != nil {
410-
return fmt.Errorf("清空服务端隧道peer字段失败: %w", err)
425+
})
426+
if result.Error != nil {
427+
return fmt.Errorf("清空服务端隧道peer字段失败: %w", result.Error)
428+
}
429+
// 如果没有更新任何记录,说明隧道可能已被删除,记录警告但不报错
430+
if result.RowsAffected == 0 {
431+
log.Warnf("[Service] 服务端隧道记录不存在,可能已被删除: instanceID=%s", *service.ServerInstanceId)
411432
}
412433
}
413434
}

web/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "NodePassDash",
33
"private": true,
4-
"version": "3.2.0-beta5",
4+
"version": "3.2.0-beta6",
55
"type": "module",
66
"scripts": {
77
"dev": "vite",

web/src/pages/services/index.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -470,7 +470,7 @@ export default function ServicesPage() {
470470
startContent={<FontAwesomeIcon icon={faLayerGroup} />}
471471
variant="flat"
472472
>
473-
场景创建
473+
服务创建
474474
</Button>
475475
</DropdownTrigger>
476476
<DropdownMenu

0 commit comments

Comments
 (0)