fix: add service management scripts for port conflicts
New tools: - 鍋滄鎵€鏈夋湇鍔?bat - Stop all services - 鏌ョ湅绔彛鍗犵敤.bat - Check port usage - 閲嶅惎鏈嶅姟.bat - Restart services - 蹇€熶慨澶?绔彛鍗犵敤.md - Troubleshooting guide These scripts help resolve: - EADDRINUSE error (port 3001 already in use) - ENOBUFS error (network connection issues) - Timeout errors (backend not responding)
This commit is contained in:
56
停止所有服务.bat
Normal file
56
停止所有服务.bat
Normal file
@@ -0,0 +1,56 @@
|
|||||||
|
@echo off
|
||||||
|
chcp 65001 >nul
|
||||||
|
echo ========================================
|
||||||
|
echo 停止所有服务
|
||||||
|
echo ========================================
|
||||||
|
echo.
|
||||||
|
|
||||||
|
echo [1] 查找占用3001端口的进程...
|
||||||
|
for /f "tokens=5" %%a in ('netstat -aon ^| findstr :3001') do (
|
||||||
|
set PID=%%a
|
||||||
|
echo 找到进程: PID=%%a
|
||||||
|
taskkill /F /PID %%a >nul 2>&1
|
||||||
|
if errorlevel 1 (
|
||||||
|
echo ❌ 无法终止进程 %%a
|
||||||
|
) else (
|
||||||
|
echo ✅ 已终止进程 %%a
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
echo.
|
||||||
|
echo [2] 查找占用3000端口的进程...
|
||||||
|
for /f "tokens=5" %%a in ('netstat -aon ^| findstr :3000') do (
|
||||||
|
set PID=%%a
|
||||||
|
echo 找到进程: PID=%%a
|
||||||
|
taskkill /F /PID %%a >nul 2>&1
|
||||||
|
if errorlevel 1 (
|
||||||
|
echo ❌ 无法终止进程 %%a
|
||||||
|
) else (
|
||||||
|
echo ✅ 已终止进程 %%a
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
echo.
|
||||||
|
echo [3] 查找Node进程...
|
||||||
|
tasklist | findstr node.exe >nul
|
||||||
|
if not errorlevel 1 (
|
||||||
|
echo 找到Node进程,正在终止...
|
||||||
|
taskkill /F /IM node.exe >nul 2>&1
|
||||||
|
if errorlevel 1 (
|
||||||
|
echo ❌ 无法终止Node进程
|
||||||
|
) else (
|
||||||
|
echo ✅ 已终止所有Node进程
|
||||||
|
)
|
||||||
|
) else (
|
||||||
|
echo ℹ️ 没有运行中的Node进程
|
||||||
|
)
|
||||||
|
|
||||||
|
echo.
|
||||||
|
echo ========================================
|
||||||
|
echo 清理完成
|
||||||
|
echo ========================================
|
||||||
|
echo.
|
||||||
|
echo 现在可以重新启动服务了
|
||||||
|
echo.
|
||||||
|
pause
|
||||||
|
|
||||||
246
快速修复-端口占用.md
Normal file
246
快速修复-端口占用.md
Normal file
@@ -0,0 +1,246 @@
|
|||||||
|
# 🔧 快速修复:端口占用问题
|
||||||
|
|
||||||
|
## ❌ 问题症状
|
||||||
|
|
||||||
|
### 错误1:EADDRINUSE
|
||||||
|
```
|
||||||
|
ERROR: listen EADDRINUSE: address already in use 0.0.0.0:3001
|
||||||
|
```
|
||||||
|
**原因:** 后端服务已经在运行,端口3001被占用
|
||||||
|
|
||||||
|
### 错误2:ENOBUFS / 连接错误
|
||||||
|
```
|
||||||
|
[vite] http proxy error: /api/v1/projects
|
||||||
|
AggregateError [ENOBUFS]
|
||||||
|
```
|
||||||
|
**原因:** 前端尝试连接后端,但后端未正常运行
|
||||||
|
|
||||||
|
### 错误3:超时错误
|
||||||
|
```
|
||||||
|
AxiosError: timeout of 30000ms exceeded
|
||||||
|
```
|
||||||
|
**原因:** API请求超时,后端服务不可用
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## ✅ 解决方案(3步)
|
||||||
|
|
||||||
|
### 方案1:使用脚本(推荐)⭐
|
||||||
|
|
||||||
|
**步骤1:停止所有服务**
|
||||||
|
```powershell
|
||||||
|
双击运行:停止所有服务.bat
|
||||||
|
```
|
||||||
|
|
||||||
|
**步骤2:重新启动**
|
||||||
|
```powershell
|
||||||
|
双击运行:一键启动.bat
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 方案2:手动操作
|
||||||
|
|
||||||
|
**步骤1:查看端口占用**
|
||||||
|
```powershell
|
||||||
|
双击运行:查看端口占用.bat
|
||||||
|
```
|
||||||
|
|
||||||
|
**步骤2:手动停止进程**
|
||||||
|
```powershell
|
||||||
|
# 查找占用3001端口的进程
|
||||||
|
netstat -ano | findstr :3001
|
||||||
|
|
||||||
|
# 假设PID是12345,停止该进程
|
||||||
|
taskkill /F /PID 12345
|
||||||
|
```
|
||||||
|
|
||||||
|
**步骤3:重新启动**
|
||||||
|
```powershell
|
||||||
|
# 终端1 - 后端
|
||||||
|
cd backend
|
||||||
|
npm run dev
|
||||||
|
|
||||||
|
# 终端2 - 前端
|
||||||
|
cd frontend
|
||||||
|
npm run dev
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 方案3:停止所有Node进程(彻底清理)
|
||||||
|
|
||||||
|
```powershell
|
||||||
|
# 停止所有Node进程
|
||||||
|
taskkill /F /IM node.exe
|
||||||
|
|
||||||
|
# 然后重新启动
|
||||||
|
双击运行:一键启动.bat
|
||||||
|
```
|
||||||
|
|
||||||
|
⚠️ **警告:** 这会停止电脑上所有Node进程,包括其他项目!
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🔍 诊断工具
|
||||||
|
|
||||||
|
### 1. 查看端口占用
|
||||||
|
```powershell
|
||||||
|
查看端口占用.bat
|
||||||
|
```
|
||||||
|
|
||||||
|
### 2. 停止所有服务
|
||||||
|
```powershell
|
||||||
|
停止所有服务.bat
|
||||||
|
```
|
||||||
|
|
||||||
|
### 3. 系统诊断
|
||||||
|
```powershell
|
||||||
|
诊断问题.bat
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📋 完整启动清单
|
||||||
|
|
||||||
|
### ✅ 正确的启动流程
|
||||||
|
|
||||||
|
1. **确保之前的服务已停止**
|
||||||
|
```powershell
|
||||||
|
停止所有服务.bat
|
||||||
|
```
|
||||||
|
|
||||||
|
2. **启动Docker容器**
|
||||||
|
```powershell
|
||||||
|
docker-compose up -d
|
||||||
|
# 或者一键启动会自动处理
|
||||||
|
```
|
||||||
|
|
||||||
|
3. **启动后端服务**
|
||||||
|
```powershell
|
||||||
|
cd backend
|
||||||
|
npm run dev
|
||||||
|
```
|
||||||
|
|
||||||
|
**预期输出:**
|
||||||
|
```
|
||||||
|
🚀 AI临床研究平台 - 后端服务器启动成功!
|
||||||
|
📍 服务地址: http://localhost:3001
|
||||||
|
```
|
||||||
|
|
||||||
|
4. **启动前端服务**
|
||||||
|
```powershell
|
||||||
|
cd frontend
|
||||||
|
npm run dev
|
||||||
|
```
|
||||||
|
|
||||||
|
**预期输出:**
|
||||||
|
```
|
||||||
|
➜ Local: http://localhost:3000/
|
||||||
|
```
|
||||||
|
|
||||||
|
5. **访问系统**
|
||||||
|
```
|
||||||
|
http://localhost:3000/
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## ⚠️ 常见错误
|
||||||
|
|
||||||
|
### 错误1:端口3001已占用
|
||||||
|
**解决:** 运行 `停止所有服务.bat`
|
||||||
|
|
||||||
|
### 错误2:端口3000已占用
|
||||||
|
**解决:** 运行 `停止所有服务.bat`
|
||||||
|
|
||||||
|
### 错误3:Docker容器未运行
|
||||||
|
**解决:**
|
||||||
|
```powershell
|
||||||
|
docker-compose up -d
|
||||||
|
```
|
||||||
|
|
||||||
|
### 错误4:数据库连接失败
|
||||||
|
**解决:**
|
||||||
|
```powershell
|
||||||
|
# 检查容器状态
|
||||||
|
docker ps
|
||||||
|
|
||||||
|
# 如果没有看到postgres和redis,启动它们
|
||||||
|
docker-compose up -d
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🎯 快速命令参考
|
||||||
|
|
||||||
|
### 查看端口占用
|
||||||
|
```powershell
|
||||||
|
# 查看3001端口
|
||||||
|
netstat -ano | findstr :3001
|
||||||
|
|
||||||
|
# 查看3000端口
|
||||||
|
netstat -ano | findstr :3000
|
||||||
|
|
||||||
|
# 查看所有Node进程
|
||||||
|
tasklist | findstr node.exe
|
||||||
|
```
|
||||||
|
|
||||||
|
### 停止进程
|
||||||
|
```powershell
|
||||||
|
# 停止特定PID
|
||||||
|
taskkill /F /PID <PID号>
|
||||||
|
|
||||||
|
# 停止所有Node进程
|
||||||
|
taskkill /F /IM node.exe
|
||||||
|
```
|
||||||
|
|
||||||
|
### 检查服务状态
|
||||||
|
```powershell
|
||||||
|
# 后端健康检查
|
||||||
|
curl http://localhost:3001/health
|
||||||
|
|
||||||
|
# Docker容器状态
|
||||||
|
docker ps
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 💡 避免端口占用的建议
|
||||||
|
|
||||||
|
### 1. 使用统一的启动脚本
|
||||||
|
始终使用 `一键启动.bat` 启动服务
|
||||||
|
|
||||||
|
### 2. 使用统一的停止脚本
|
||||||
|
不用时运行 `停止所有服务.bat` 停止服务
|
||||||
|
|
||||||
|
### 3. 不要重复启动
|
||||||
|
在启动新服务前,先确保旧服务已停止
|
||||||
|
|
||||||
|
### 4. 关闭终端时确保进程已停止
|
||||||
|
不要直接关闭终端窗口,先按 `Ctrl+C` 停止服务
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🆘 仍然无法解决?
|
||||||
|
|
||||||
|
### 检查清单
|
||||||
|
- [ ] 运行了 `停止所有服务.bat`
|
||||||
|
- [ ] 确认端口已释放(`netstat -ano | findstr :3001`)
|
||||||
|
- [ ] Docker容器正在运行(`docker ps`)
|
||||||
|
- [ ] 后端依赖已安装(`cd backend && npm install`)
|
||||||
|
- [ ] 前端依赖已安装(`cd frontend && npm install`)
|
||||||
|
- [ ] 数据库迁移已完成(`cd backend && npx prisma migrate dev`)
|
||||||
|
- [ ] 模拟用户已创建(`cd backend && npx tsx src/scripts/create-mock-user.ts`)
|
||||||
|
|
||||||
|
### 获取帮助
|
||||||
|
如果问题仍未解决,请提供:
|
||||||
|
1. `查看端口占用.bat` 的输出
|
||||||
|
2. 后端启动的完整日志
|
||||||
|
3. 前端启动的完整日志
|
||||||
|
4. `docker ps` 的输出
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**✅ 按照以上步骤操作,问题应该可以解决!**
|
||||||
|
|
||||||
50
查看端口占用.bat
Normal file
50
查看端口占用.bat
Normal file
@@ -0,0 +1,50 @@
|
|||||||
|
@echo off
|
||||||
|
chcp 65001 >nul
|
||||||
|
echo ========================================
|
||||||
|
echo 查看端口占用情况
|
||||||
|
echo ========================================
|
||||||
|
echo.
|
||||||
|
|
||||||
|
echo [端口 3001 - 后端服务]
|
||||||
|
netstat -ano | findstr :3001
|
||||||
|
if errorlevel 1 (
|
||||||
|
echo ✅ 端口3001空闲
|
||||||
|
) else (
|
||||||
|
echo ⚠️ 端口3001已被占用
|
||||||
|
echo.
|
||||||
|
echo 占用进程详情:
|
||||||
|
for /f "tokens=5" %%a in ('netstat -aon ^| findstr :3001 ^| findstr LISTENING') do (
|
||||||
|
tasklist | findstr %%a
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
echo.
|
||||||
|
echo [端口 3000 - 前端服务]
|
||||||
|
netstat -ano | findstr :3000
|
||||||
|
if errorlevel 1 (
|
||||||
|
echo ✅ 端口3000空闲
|
||||||
|
) else (
|
||||||
|
echo ⚠️ 端口3000已被占用
|
||||||
|
echo.
|
||||||
|
echo 占用进程详情:
|
||||||
|
for /f "tokens=5" %%a in ('netstat -aon ^| findstr :3000 ^| findstr LISTENING') do (
|
||||||
|
tasklist | findstr %%a
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
echo.
|
||||||
|
echo [所有Node.js进程]
|
||||||
|
tasklist | findstr node.exe
|
||||||
|
if errorlevel 1 (
|
||||||
|
echo ℹ️ 没有运行中的Node进程
|
||||||
|
)
|
||||||
|
|
||||||
|
echo.
|
||||||
|
echo ========================================
|
||||||
|
echo 检查完成
|
||||||
|
echo ========================================
|
||||||
|
echo.
|
||||||
|
echo 如需停止服务,请运行: 停止所有服务.bat
|
||||||
|
echo.
|
||||||
|
pause
|
||||||
|
|
||||||
21
重启服务.bat
Normal file
21
重启服务.bat
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
@echo off
|
||||||
|
chcp 65001 >nul
|
||||||
|
echo ========================================
|
||||||
|
echo 重启服务
|
||||||
|
echo ========================================
|
||||||
|
echo.
|
||||||
|
|
||||||
|
echo [1/3] 停止所有现有服务...
|
||||||
|
call "%~dp0停止所有服务.bat"
|
||||||
|
|
||||||
|
echo.
|
||||||
|
echo [2/3] 等待2秒...
|
||||||
|
timeout /t 2 /nobreak >nul
|
||||||
|
|
||||||
|
echo.
|
||||||
|
echo [3/3] 启动服务...
|
||||||
|
call "%~dp0一键启动.bat"
|
||||||
|
|
||||||
|
echo.
|
||||||
|
echo 重启完成!
|
||||||
|
|
||||||
Reference in New Issue
Block a user