7.7 KiB
7.7 KiB
Supabase 数据迁移指南
概述
本指南将帮助您将当前使用模拟数据的 uni-app 项目迁移到使用 Supabase 数据库。您的项目已经配置了连接到 Ubuntu 服务器上的 Supabase(IP: 192.168.1.61),现在需要创建数据库表并插入测试数据,然后修改前端代码以使用真实数据。
第一步:在 Supabase 中创建数据库表
方法一:通过 Supabase Dashboard 执行 SQL
-
打开 Supabase Dashboard
- 访问:http://192.168.1.61:3000
- 使用 Dashboard 用户名和密码登录(位于
supabase_pro/.env中的DASHBOARD_USERNAME和DASHBOARD_PASSWORD)
-
进入 SQL Editor
- 在左侧菜单中点击 "SQL Editor"
- 点击 "New query" 创建新查询
-
执行建表脚本
- 复制
sql/001_create_tables.sql文件中的全部内容 - 粘贴到 SQL Editor 中
- 点击 "Run" 执行
- 复制
-
执行插入数据脚本
- 复制
sql/002_insert_test_data.sql文件中的全部内容 - 粘贴到 SQL Editor 中
- 点击 "Run" 执行
- 复制
方法二:通过命令行执行(如果 Supabase 运行在 Ubuntu 服务器上)
# 登录到 Ubuntu 服务器
ssh hfkj@192.168.1.61
# 进入 Supabase 项目目录(假设 Supabase 安装在默认位置)
cd ~/supabase
# 使用 psql 连接到数据库执行 SQL 脚本
# 注意:需要知道数据库密码(位于 supabase_pro/.env 中的 POSTGRES_PASSWORD)
PGPASSWORD=yxyHINygZMLSq9jLddrZQBB-CoyGHSF5DwlwWmbrYXc psql -h localhost -U postgres -d postgres -f /path/to/001_create_tables.sql
PGPASSWORD=yxyHINygZMLSq9jLddrZQBB-CoyGHSF5DwlwWmbrYXc psql -h localhost -U postgres -d postgres -f /path/to/002_insert_test_data.sql
第二步:验证数据表创建成功
在 Supabase Dashboard 中验证
-
查看 Tables
- 在左侧菜单中点击 "Table Editor"
- 应该能看到
categories和products表
-
查看数据
- 点击
categories表,应该能看到 10 条分类数据 - 点击
products表,应该能看到 18 条商品数据
- 点击
通过 API 验证
-
测试分类 API
GET http://192.168.1.61:8000/rest/v1/categories Headers: apikey: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJyb2xlIjoiYW5vbiIsImlzcyI6InN1cGFiYXNlIiwiaWF0IjoxNzY4ODMwNjI0LCJleHAiOjE5MjY1MTA2MjR9.mDVl-kIOdRK9v6VTxo0TDF8r7X7xk3PZXazaavHyVvg -
测试商品 API
GET http://192.168.1.61:8000/rest/v1/products?category_id=eq.cold Headers: apikey: [同上]
第三步:修改前端代码使用真实数据
1. 已创建的服务文件
我已经创建了 utils/supabaseService.uts 文件,提供了以下功能:
getCategories()- 获取所有分类getProductsByCategory()- 获取指定分类的商品searchProducts()- 搜索商品getProductById()- 获取单个商品详情getHotProducts()- 获取热销商品getRecommendedProducts()- 获取推荐商品
2. 修改分类页面 (pages/mall/consumer/category.uvue)
需要将硬编码的模拟数据替换为从 Supabase 获取的数据:
// 在 script 部分添加导入
import supabaseService from '@/utils/supabaseService.uts'
import type { Category, Product } from '@/utils/supabaseService.uts'
// 替换 medicineCategories 的初始化
// 删除原有的 medicineCategories 数组定义
// 修改 onMounted 或创建新的生命周期函数
onMounted(async () => {
await loadCategories()
await loadProducts()
})
// 添加加载分类的方法
const loadCategories = async () => {
const categories = await supabaseService.getCategories()
if (categories.length > 0) {
primaryCategories.value = categories
// 设置默认选中第一个分类
if (!activePrimary.value && categories[0]) {
activePrimary.value = categories[0].id
}
}
}
// 修改 selectPrimaryCategory 方法
const selectPrimaryCategory = async (categoryId: string) => {
activePrimary.value = categoryId
// 更新当前分类信息
const category = primaryCategories.value.find(cat => cat.id === categoryId)
if (category) {
currentCategoryName.value = category.name
currentCategoryDesc.value = category.description
}
// 加载对应商品
const response = await supabaseService.getProductsByCategory(categoryId)
productList.value = response.data
hasMore.value = response.hasmore
}
3. 修改主页 (pages/mall/consumer/index.uvue)
如果主页显示商品,也需要修改为从 Supabase 获取:
import supabaseService from '@/utils/supabaseService.uts'
// 获取热销商品
const loadHotProducts = async () => {
hotProducts.value = await supabaseService.getHotProducts(6)
}
// 获取推荐商品
const loadRecommendedProducts = async () => {
recommendedProducts.value = await supabaseService.getRecommendedProducts(6)
}
第四步:测试连接和数据
1. 测试 Supabase 连接
创建一个测试页面或使用现有的页面测试连接:
// 测试代码示例
const testConnection = async () => {
try {
const categories = await supabaseService.getCategories()
console.log('连接成功,获取到分类数:', categories.length)
uni.showToast({
title: `连接成功,获取到 ${categories.length} 个分类`,
icon: 'success'
})
} catch (error) {
console.error('连接失败:', error)
uni.showToast({
title: '连接失败,请检查配置',
icon: 'error'
})
}
}
2. 测试数据加载
在分类页面测试:
- 打开分类页面
- 检查分类列表是否显示
- 点击不同分类,检查商品列表是否更新
- 检查商品图片、价格等信息是否正确显示
3. 测试搜索功能
如果项目有搜索页面,测试搜索功能:
- 输入关键字搜索
- 检查返回的商品是否相关
第五步:处理图片 URL
当前情况
- 数据库中的
image字段目前为空或使用本地路径 - 实际项目中,图片应该存储在 Supabase Storage 或 CDN
临时解决方案
在显示图片时,如果数据库中没有图片 URL,使用默认图片:
const getProductImage = (product: Product) => {
if (product.image && product.image.startsWith('http')) {
return product.image
}
return '/static/images/default-product.png'
}
长期解决方案
- 将图片上传到 Supabase Storage
- 更新数据库中的
image字段为完整 URL
常见问题解决
1. 连接超时或失败
- 检查 Ubuntu 服务器上的 Supabase 是否正常运行
- 检查防火墙设置,确保 8000 和 3000 端口可访问
- 检查
ak/config.uts中的 IP 地址是否正确
2. 401 未授权错误
- 检查
SUPA_KEY是否正确(与supabase_pro/.env中的ANON_KEY一致) - 检查 Supabase 是否已启用匿名访问
3. 表不存在错误
- 确认已执行 SQL 脚本创建表
- 检查表名是否拼写正确(区分大小写)
4. 数据不显示
- 检查浏览器控制台是否有错误
- 检查网络请求是否成功
- 确认数据库中有数据
下一步优化建议
- 添加加载状态:在数据加载时显示加载动画
- 错误处理:添加更完善的错误处理和重试机制
- 数据缓存:使用本地存储缓存常用数据,减少网络请求
- 分页加载:实现滚动加载更多商品
- 图片优化:使用图片懒加载和压缩
总结
通过以上步骤,您的项目将从使用模拟数据过渡到使用 Supabase 数据库数据。主要工作包括:
- 在 Supabase 中创建表和插入测试数据
- 修改前端代码使用新的服务层
- 测试连接和数据加载
完成后,您的应用将具备完整的后端数据支持,为后续添加用户管理、购物车、订单等功能打下基础。