diff --git a/src/pages/FriendMoments/CreateMoment.jsx b/src/pages/FriendMoments/CreateMoment.jsx
index 4aca455..1b98a44 100644
--- a/src/pages/FriendMoments/CreateMoment.jsx
+++ b/src/pages/FriendMoments/CreateMoment.jsx
@@ -4,7 +4,7 @@
 // // import './CreateMoment.css';
 // // import Header from '../../components/Header';
 
-// // const API_BASE = process.env.REACT_APP_API_BASE;
+// // 
 // // const USER_ID = 456;
 
 // // const CreateMoment = () => {
@@ -34,7 +34,7 @@
 // //   const uploadImageToServer = async (file) => {
 // //     const formData = new FormData();
 // //     formData.append('file', file);
-// //     const res = await axios.post(`${API_BASE}/upload`, formData, {
+// //     const res = await axios.post(`/upload`, formData, {
 // //       headers: {'Content-Type': 'multipart/form-data'}
 // //     });
 // //     return res.data.url;
@@ -47,7 +47,7 @@
 // //     }
 // //     try {
 // //       await axios.post(
-// //         `${API_BASE}/echo/users/${USER_ID}/CreateMoment`,
+// //         `/echo/users/${USER_ID}/CreateMoment`,
 // //         {
 // //           title: title.trim() || undefined,
 // //           friend_content: content.trim(),
@@ -107,7 +107,7 @@
 // import './CreateMoment.css';
 // import Header from '../../components/Header';
 
-// const API_BASE = process.env.REACT_APP_API_BASE;
+// 
 // const USER_ID = 456;
 
 // const CreateMoment = ({ onClose, fetchFeeds }) => {
@@ -135,7 +135,7 @@
 //     const uploadImageToServer = async (file) => {
 //         const formData = new FormData();
 //         formData.append('file', file);
-//         const res = await axios.post(`${API_BASE}/upload`, formData, {
+//         const res = await axios.post(`/upload`, formData, {
 //             headers: { 'Content-Type': 'multipart/form-data' }
 //         });
 //         return res.data.url;
@@ -148,7 +148,7 @@
 //         }
 //         try {
 //             await axios.post(
-//                 `${API_BASE}/echo/users/${USER_ID}/CreateMoment`,
+//                 `/echo/users/${USER_ID}/CreateMoment`,
 //                 {
 //                     title: title.trim() || undefined,
 //                     friend_content: content.trim(),
diff --git a/src/pages/FriendMoments/FriendMoments.jsx b/src/pages/FriendMoments/FriendMoments.jsx
index fdf101c..6d9def6 100644
--- a/src/pages/FriendMoments/FriendMoments.jsx
+++ b/src/pages/FriendMoments/FriendMoments.jsx
@@ -4,7 +4,7 @@
 import Header from '../../components/Header';
 import { Edit } from '@icon-park/react';
 
-const API_BASE = process.env.REACT_APP_API_BASE;
+
 const USER_ID = 456;
 
 const FriendMoments = () => {
@@ -22,7 +22,7 @@
   // 拉取好友动态列表
   const fetchFeeds = async () => {
     try {
-      const res = await axios.get(`${API_BASE}/echo/users/${USER_ID}/feeds`);
+      const res = await axios.get(`/echo/users/${USER_ID}/feeds`);
       setFeeds(res.data.feeds);
       setFilteredFeeds(res.data.feeds);
     } catch (err) {
@@ -63,7 +63,7 @@
   const uploadImageToServer = async (file) => {
     const fd = new FormData();
     fd.append('file', file);
-    const res = await axios.post(`${API_BASE}/upload`, fd, {
+    const res = await axios.post(`/upload`, fd, {
       headers: {'Content-Type':'multipart/form-data'}
     });
     return res.data.url;
@@ -77,7 +77,7 @@
     }
     try {
       await axios.post(
-        `${API_BASE}/echo/users/${USER_ID}/createFeed`,
+        `/echo/users/${USER_ID}/createFeed`,
         { title: title.trim() || undefined, friend_content: content.trim(), images }
       );
       // 重置表单
@@ -97,7 +97,7 @@
   const handleDelete = async (feedId) => {
     if (!window.confirm('确定要删除这条动态吗？')) return;
     try {
-      await axios.delete(`${API_BASE}/echo/users/me/feed/${feedId}`);
+      await axios.delete(`/echo/users/me/feed/${feedId}`);
       fetchFeeds();
     } catch (err) {
       console.error('删除失败', err);
