469 lines
9.0 KiB
Markdown
469 lines
9.0 KiB
Markdown
|
|
# 常见问题 (FAQ)
|
|||
|
|
|
|||
|
|
本文档收集了结伴客项目开发和使用过程中的常见问题及解决方案。
|
|||
|
|
|
|||
|
|
## 📋 目录
|
|||
|
|
|
|||
|
|
- [环境搭建问题](#环境搭建问题)
|
|||
|
|
- [开发相关问题](#开发相关问题)
|
|||
|
|
- [部署相关问题](#部署相关问题)
|
|||
|
|
- [数据库问题](#数据库问题)
|
|||
|
|
- [API接口问题](#api接口问题)
|
|||
|
|
- [前端问题](#前端问题)
|
|||
|
|
- [小程序问题](#小程序问题)
|
|||
|
|
- [性能优化问题](#性能优化问题)
|
|||
|
|
|
|||
|
|
## 🛠️ 环境搭建问题
|
|||
|
|
|
|||
|
|
### Q: Node.js版本要求是什么?
|
|||
|
|
**A:** 项目要求 Node.js 16.x 或更高版本。推荐使用 Node.js 18.x LTS 版本。
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# 检查Node.js版本
|
|||
|
|
node --version
|
|||
|
|
|
|||
|
|
# 使用nvm管理Node.js版本
|
|||
|
|
nvm install 18
|
|||
|
|
nvm use 18
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### Q: 安装依赖时出现权限错误怎么办?
|
|||
|
|
**A:** 避免使用 `sudo` 安装npm包,建议配置npm全局目录:
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# 创建全局目录
|
|||
|
|
mkdir ~/.npm-global
|
|||
|
|
|
|||
|
|
# 配置npm使用新目录
|
|||
|
|
npm config set prefix '~/.npm-global'
|
|||
|
|
|
|||
|
|
# 添加到环境变量
|
|||
|
|
echo 'export PATH=~/.npm-global/bin:$PATH' >> ~/.bashrc
|
|||
|
|
source ~/.bashrc
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### Q: MySQL连接失败怎么办?
|
|||
|
|
**A:** 检查以下几个方面:
|
|||
|
|
|
|||
|
|
1. **确认MySQL服务运行**
|
|||
|
|
```bash
|
|||
|
|
# macOS
|
|||
|
|
brew services start mysql
|
|||
|
|
|
|||
|
|
# Linux
|
|||
|
|
sudo systemctl start mysql
|
|||
|
|
|
|||
|
|
# Windows
|
|||
|
|
net start mysql
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
2. **检查连接配置**
|
|||
|
|
```javascript
|
|||
|
|
// backend/.env
|
|||
|
|
DB_HOST=localhost
|
|||
|
|
DB_PORT=3306
|
|||
|
|
DB_NAME=jiebanke
|
|||
|
|
DB_USER=root
|
|||
|
|
DB_PASSWORD=your_password
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
3. **创建数据库**
|
|||
|
|
```sql
|
|||
|
|
CREATE DATABASE jiebanke CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### Q: Redis连接问题如何解决?
|
|||
|
|
**A:** 确保Redis服务正常运行:
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# 启动Redis服务
|
|||
|
|
redis-server
|
|||
|
|
|
|||
|
|
# 测试连接
|
|||
|
|
redis-cli ping
|
|||
|
|
# 应该返回 PONG
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 💻 开发相关问题
|
|||
|
|
|
|||
|
|
### Q: 如何重置数据库?
|
|||
|
|
**A:** 使用项目提供的重置脚本:
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# 方法1:使用npm脚本
|
|||
|
|
cd backend
|
|||
|
|
npm run db:reset
|
|||
|
|
|
|||
|
|
# 方法2:手动执行SQL
|
|||
|
|
mysql -u root -p jiebanke < scripts/init-database.sql
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### Q: 热重载不工作怎么办?
|
|||
|
|
**A:** 检查以下配置:
|
|||
|
|
|
|||
|
|
1. **后端热重载**
|
|||
|
|
```bash
|
|||
|
|
# 确保使用nodemon
|
|||
|
|
npm run dev
|
|||
|
|
|
|||
|
|
# 检查nodemon配置
|
|||
|
|
cat nodemon.json
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
2. **前端热重载**
|
|||
|
|
```bash
|
|||
|
|
# 确保Vite配置正确
|
|||
|
|
npm run dev
|
|||
|
|
|
|||
|
|
# 检查vite.config.ts中的server配置
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### Q: ESLint报错如何解决?
|
|||
|
|
**A:** 常见解决方案:
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# 自动修复可修复的问题
|
|||
|
|
npm run lint:fix
|
|||
|
|
|
|||
|
|
# 检查ESLint配置
|
|||
|
|
cat .eslintrc.js
|
|||
|
|
|
|||
|
|
# 重新安装ESLint依赖
|
|||
|
|
npm install --save-dev eslint @typescript-eslint/parser
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### Q: 如何调试API接口?
|
|||
|
|
**A:** 推荐使用以下工具:
|
|||
|
|
|
|||
|
|
1. **使用内置测试脚本**
|
|||
|
|
```bash
|
|||
|
|
cd backend
|
|||
|
|
npm run test:api
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
2. **使用Postman或Insomnia**
|
|||
|
|
- 导入API文档中的接口定义
|
|||
|
|
- 配置环境变量
|
|||
|
|
|
|||
|
|
3. **使用curl命令**
|
|||
|
|
```bash
|
|||
|
|
# 测试登录接口
|
|||
|
|
curl -X POST http://localhost:3000/api/v1/auth/login \
|
|||
|
|
-H "Content-Type: application/json" \
|
|||
|
|
-d '{"email":"test@example.com","password":"123456"}'
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 🚀 部署相关问题
|
|||
|
|
|
|||
|
|
### Q: Docker部署失败怎么办?
|
|||
|
|
**A:** 检查以下几个方面:
|
|||
|
|
|
|||
|
|
1. **确认Docker版本**
|
|||
|
|
```bash
|
|||
|
|
docker --version
|
|||
|
|
docker-compose --version
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
2. **检查端口占用**
|
|||
|
|
```bash
|
|||
|
|
# 检查端口是否被占用
|
|||
|
|
lsof -i :3000
|
|||
|
|
lsof -i :8080
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
3. **查看容器日志**
|
|||
|
|
```bash
|
|||
|
|
docker-compose logs backend
|
|||
|
|
docker-compose logs admin-system
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### Q: Nginx配置问题如何解决?
|
|||
|
|
**A:** 常见配置问题:
|
|||
|
|
|
|||
|
|
1. **检查配置文件语法**
|
|||
|
|
```bash
|
|||
|
|
nginx -t
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
2. **重新加载配置**
|
|||
|
|
```bash
|
|||
|
|
nginx -s reload
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
3. **查看错误日志**
|
|||
|
|
```bash
|
|||
|
|
tail -f /var/log/nginx/error.log
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### Q: SSL证书配置问题?
|
|||
|
|
**A:** 使用Let's Encrypt免费证书:
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# 安装certbot
|
|||
|
|
sudo apt install certbot python3-certbot-nginx
|
|||
|
|
|
|||
|
|
# 获取证书
|
|||
|
|
sudo certbot --nginx -d yourdomain.com
|
|||
|
|
|
|||
|
|
# 自动续期
|
|||
|
|
sudo crontab -e
|
|||
|
|
# 添加:0 12 * * * /usr/bin/certbot renew --quiet
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 🗄️ 数据库问题
|
|||
|
|
|
|||
|
|
### Q: 数据库迁移失败怎么办?
|
|||
|
|
**A:** 按以下步骤排查:
|
|||
|
|
|
|||
|
|
1. **检查迁移文件**
|
|||
|
|
```bash
|
|||
|
|
# 查看迁移状态
|
|||
|
|
npx sequelize-cli db:migrate:status
|
|||
|
|
|
|||
|
|
# 回滚迁移
|
|||
|
|
npx sequelize-cli db:migrate:undo
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
2. **手动执行SQL**
|
|||
|
|
```sql
|
|||
|
|
-- 查看表结构
|
|||
|
|
DESCRIBE users;
|
|||
|
|
|
|||
|
|
-- 检查约束
|
|||
|
|
SHOW CREATE TABLE users;
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### Q: 数据库性能问题如何优化?
|
|||
|
|
**A:** 常见优化方案:
|
|||
|
|
|
|||
|
|
1. **添加索引**
|
|||
|
|
```sql
|
|||
|
|
-- 为常用查询字段添加索引
|
|||
|
|
CREATE INDEX idx_user_email ON users(email);
|
|||
|
|
CREATE INDEX idx_created_at ON travel_plans(created_at);
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
2. **查询优化**
|
|||
|
|
```sql
|
|||
|
|
-- 使用EXPLAIN分析查询
|
|||
|
|
EXPLAIN SELECT * FROM users WHERE email = 'test@example.com';
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
3. **配置优化**
|
|||
|
|
```ini
|
|||
|
|
# my.cnf
|
|||
|
|
[mysqld]
|
|||
|
|
innodb_buffer_pool_size = 1G
|
|||
|
|
query_cache_size = 256M
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 🔌 API接口问题
|
|||
|
|
|
|||
|
|
### Q: 接口返回401未授权错误?
|
|||
|
|
**A:** 检查JWT token配置:
|
|||
|
|
|
|||
|
|
1. **确认token格式**
|
|||
|
|
```javascript
|
|||
|
|
// 请求头格式
|
|||
|
|
Authorization: Bearer <your-jwt-token>
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
2. **检查token有效期**
|
|||
|
|
```javascript
|
|||
|
|
// 解码token查看过期时间
|
|||
|
|
const jwt = require('jsonwebtoken');
|
|||
|
|
const decoded = jwt.decode(token);
|
|||
|
|
console.log(decoded.exp);
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### Q: 跨域问题如何解决?
|
|||
|
|
**A:** 配置CORS中间件:
|
|||
|
|
|
|||
|
|
```javascript
|
|||
|
|
// backend/src/app.js
|
|||
|
|
const cors = require('cors');
|
|||
|
|
|
|||
|
|
app.use(cors({
|
|||
|
|
origin: ['http://localhost:8080', 'https://admin.jiebanke.com'],
|
|||
|
|
credentials: true
|
|||
|
|
}));
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### Q: 文件上传失败怎么办?
|
|||
|
|
**A:** 检查以下配置:
|
|||
|
|
|
|||
|
|
1. **文件大小限制**
|
|||
|
|
```javascript
|
|||
|
|
// 增加文件大小限制
|
|||
|
|
app.use(express.json({ limit: '50mb' }));
|
|||
|
|
app.use(express.urlencoded({ limit: '50mb', extended: true }));
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
2. **存储路径权限**
|
|||
|
|
```bash
|
|||
|
|
# 确保上传目录有写权限
|
|||
|
|
chmod 755 uploads/
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 🎨 前端问题
|
|||
|
|
|
|||
|
|
### Q: 组件样式不生效怎么办?
|
|||
|
|
**A:** 检查以下几个方面:
|
|||
|
|
|
|||
|
|
1. **CSS作用域**
|
|||
|
|
```vue
|
|||
|
|
<style scoped>
|
|||
|
|
/* 组件内样式 */
|
|||
|
|
</style>
|
|||
|
|
|
|||
|
|
<style>
|
|||
|
|
/* 全局样式 */
|
|||
|
|
</style>
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
2. **样式优先级**
|
|||
|
|
```css
|
|||
|
|
/* 使用!important提高优先级 */
|
|||
|
|
.my-class {
|
|||
|
|
color: red !important;
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### Q: 路由跳转问题?
|
|||
|
|
**A:** 常见解决方案:
|
|||
|
|
|
|||
|
|
```javascript
|
|||
|
|
// 编程式导航
|
|||
|
|
this.$router.push('/path');
|
|||
|
|
|
|||
|
|
// 声明式导航
|
|||
|
|
<router-link to="/path">链接</router-link>
|
|||
|
|
|
|||
|
|
// 带参数跳转
|
|||
|
|
this.$router.push({
|
|||
|
|
name: 'user',
|
|||
|
|
params: { id: 123 }
|
|||
|
|
});
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### Q: 状态管理问题?
|
|||
|
|
**A:** 使用Pinia进行状态管理:
|
|||
|
|
|
|||
|
|
```javascript
|
|||
|
|
// stores/user.js
|
|||
|
|
import { defineStore } from 'pinia';
|
|||
|
|
|
|||
|
|
export const useUserStore = defineStore('user', {
|
|||
|
|
state: () => ({
|
|||
|
|
userInfo: null
|
|||
|
|
}),
|
|||
|
|
actions: {
|
|||
|
|
setUserInfo(info) {
|
|||
|
|
this.userInfo = info;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
});
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 📱 小程序问题
|
|||
|
|
|
|||
|
|
### Q: 小程序真机调试问题?
|
|||
|
|
**A:** 常见解决方案:
|
|||
|
|
|
|||
|
|
1. **网络请求问题**
|
|||
|
|
```javascript
|
|||
|
|
// 确保域名在小程序后台配置
|
|||
|
|
wx.request({
|
|||
|
|
url: 'https://api.jiebanke.com/api/v1/users',
|
|||
|
|
method: 'GET',
|
|||
|
|
success: (res) => {
|
|||
|
|
console.log(res.data);
|
|||
|
|
}
|
|||
|
|
});
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
2. **权限问题**
|
|||
|
|
```json
|
|||
|
|
// app.json
|
|||
|
|
{
|
|||
|
|
"permission": {
|
|||
|
|
"scope.userLocation": {
|
|||
|
|
"desc": "你的位置信息将用于小程序位置接口的效果展示"
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### Q: 小程序分包加载问题?
|
|||
|
|
**A:** 配置分包策略:
|
|||
|
|
|
|||
|
|
```json
|
|||
|
|
// app.json
|
|||
|
|
{
|
|||
|
|
"pages": ["pages/index/index"],
|
|||
|
|
"subPackages": [
|
|||
|
|
{
|
|||
|
|
"root": "pages/travel",
|
|||
|
|
"pages": ["list/list", "detail/detail"]
|
|||
|
|
}
|
|||
|
|
]
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## ⚡ 性能优化问题
|
|||
|
|
|
|||
|
|
### Q: 页面加载慢怎么优化?
|
|||
|
|
**A:** 常见优化策略:
|
|||
|
|
|
|||
|
|
1. **代码分割**
|
|||
|
|
```javascript
|
|||
|
|
// 路由懒加载
|
|||
|
|
const UserProfile = () => import('./components/UserProfile.vue');
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
2. **图片优化**
|
|||
|
|
```html
|
|||
|
|
<!-- 使用WebP格式 -->
|
|||
|
|
<img src="image.webp" alt="description" loading="lazy">
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
3. **缓存策略**
|
|||
|
|
```javascript
|
|||
|
|
// 设置HTTP缓存
|
|||
|
|
app.use(express.static('public', {
|
|||
|
|
maxAge: '1d'
|
|||
|
|
}));
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### Q: 数据库查询慢如何优化?
|
|||
|
|
**A:** 优化建议:
|
|||
|
|
|
|||
|
|
1. **使用索引**
|
|||
|
|
2. **避免N+1查询**
|
|||
|
|
3. **使用连接查询替代子查询**
|
|||
|
|
4. **分页查询大数据集**
|
|||
|
|
|
|||
|
|
## 📞 获取帮助
|
|||
|
|
|
|||
|
|
如果以上FAQ没有解决您的问题,可以通过以下方式获取帮助:
|
|||
|
|
|
|||
|
|
### 技术支持
|
|||
|
|
- **GitHub Issues**: [提交问题](https://github.com/jiebanke/jiebanke/issues)
|
|||
|
|
- **开发者邮箱**: dev@jiebanke.com
|
|||
|
|
- **技术QQ群**: 123456789
|
|||
|
|
|
|||
|
|
### 文档资源
|
|||
|
|
- **开发指南**: [docs/开发指南.md](开发指南.md)
|
|||
|
|
- **API文档**: [docs/API接口文档.md](API接口文档.md)
|
|||
|
|
- **部署指南**: [docs/部署指南.md](部署指南.md)
|
|||
|
|
|
|||
|
|
### 社区资源
|
|||
|
|
- **官方论坛**: https://forum.jiebanke.com
|
|||
|
|
- **技术博客**: https://blog.jiebanke.com
|
|||
|
|
- **视频教程**: https://video.jiebanke.com
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
*本文档持续更新中,如有新问题请及时反馈。*
|
|||
|
|
|
|||
|
|
*最后更新:2024年1月*
|