diff --git a/backend/internal/api/conversation.go b/backend/internal/api/conversation.go index c3eed70..e21471a 100644 --- a/backend/internal/api/conversation.go +++ b/backend/internal/api/conversation.go @@ -273,6 +273,9 @@ func (h *ConversationHandler) GetMessages(c *gin.Context) { return } count, _ := h.msgRepo.GetMessageCount(c.Request.Context(), sessionID) + if messages == nil { + messages = []store.StoredMessage{} + } c.JSON(http.StatusOK, gin.H{ "messages": messages, "total": count, @@ -314,6 +317,9 @@ func (h *ConversationHandler) GetMessages(c *gin.Context) { } messages := allMessages[start:] + if messages == nil { + messages = []models.Message{} + } c.JSON(http.StatusOK, gin.H{ "messages": messages, "total": total, diff --git a/backend/internal/store/message_pg.go b/backend/internal/store/message_pg.go index 014194b..b393c9c 100644 --- a/backend/internal/store/message_pg.go +++ b/backend/internal/store/message_pg.go @@ -90,7 +90,7 @@ func (r *PgMessageRepository) queryMessages(ctx context.Context, query string, a } defer pgxRows.Close() - var messages []StoredMessage + messages := make([]StoredMessage, 0) for pgxRows.Next() { var m StoredMessage if err := pgxRows.Scan(&m.ID, &m.SessionID, &m.Role, &m.Content, &m.TokensUsed, &m.CreatedAt); err != nil { diff --git a/frontend/src/hooks/useSessionList.ts b/frontend/src/hooks/useSessionList.ts index 841a3e4..c33e212 100644 --- a/frontend/src/hooks/useSessionList.ts +++ b/frontend/src/hooks/useSessionList.ts @@ -80,7 +80,7 @@ export function useSessionList(accessToken?: string | null) { try { const res = await listConversations(accessToken); if (res.data) { - const list = res.data.conversations.map(toSessionSummary); + const list = (res.data.conversations || []).map(toSessionSummary); setSessions(list); // 恢复上次选中的会话(如果仍然存在) const lastId = localStorage.getItem(LAST_ACTIVE_KEY); @@ -193,7 +193,7 @@ export function useSessionList(accessToken?: string | null) { try { const res = await getConversationMessages(accessToken, sessionId); if (res.data) { - return res.data.messages.map(toChatMessage); + return (res.data.messages || []).map(toChatMessage); } } catch (err) { console.error("[SessionList] 加载消息失败:", err);