一个简单Demo彻底理解前后端怎么连的丨Figma + Supabase + Vercel

作者:阿星AI工作室日期:2026/2/23

图片

哈喽,大家好!

我是阿星👋

很多小白编程学了三个月,全是AI做主UI,难以融入自己的设计理念。

甚至不了解前后端到底怎么连通的。

一旦代码出错了,可能和AI对话还要重新理解一遍概念。所以今天,我们通过一个简单的case,把一个完整前后端的核心链路全跑一遍👇🏻

让你能自己把控UI、把控数据库、把控前端、后端。

图片

🗺️ 先看一眼全局流程

整件事分五步,每一步做完了才能进下一步:

1 Figma 画页面  
2 定接口契约  
3 Supabase 建数据库→ 
4 AI 帮你写连接代码  
5 跑起来
6

🤝 动手之前先定一份「字段名合同」

这件事叫接口契约,说白了就是:前端、后端、数据库,大家提前说好同一个字段叫什么名字。

为什么要说这个?因为如果前端传给后端的是 wishText,后端存数据库用的是 wish_content,数据库字段叫 content。三个地方三个名字,项目还没上线就乱套了。

所以我们先定好两件事:

1、表名叫 wishes(数据库建表用这个,代码里取数据也用这个)

2、愿望内容字段叫 content(前端传进去叫 content,数据库存的叫 content,取出来也叫 content)

其他的——比如每条记录的 id和创建时间 created_at,Supabase 会自动帮你加,不用手动约定。

就这两条,后面所有代码都按这个来,没有第二个名字。

🎨 第一步:Figma 画页面,拿到的是「结构参考」

注册 Figma,新建文件,按 F 选 iPhone 14,手机画布出来。

图片

R 画矩形,圆角 8,写「输入你的愿望...」——这就是输入框

再画个蓝色矩形写「提交」——按钮

下面三个灰色方块占位——代表愿望列表

列表区域 → 列表-愿望展示

图片

画完后,给它们各起个 id,方便之后 JavaScript 找到它们:

输入框 → wishInput

提交按钮 → submitBtn

列表区域 → wishList

这三个名字只在前端代码内部用,不是接口契约的一部分,你自己记住就行,后面给 AI 写提示词会用到。

你可以用figma to code插件来导出代码。多种框架格式可选👇🏻

图片图片

也可以用官方的开发者模式。

图片图片

功能类似的AI工具也有很多比如Locofy Lightning,你可以搜一下相关mcp,我们今天只讲逻辑,所以不再推荐其他。

先保存这段代码到你本地编辑器里(你可以用sblime这个编辑器)

一会儿让AI照着做

你画的不一样就会和我代码不一样,只是给大家看下大概结构

1<div style="width: 392px; height: 880px; position: relative; background: white">
2  <div style="width: 393px; height: 852px; left: -1px; top: 1px; position: absolute; background: #FFFFBB; overflow: hidden">
3    <div style="width: 255px; height: 194px; left: 78px; top: 326px; position: absolute; background: white; border-radius: 8px; border: 1px black solid"></div>
4  
5  ……
6

这就是 Figma 给你的东西:样式代码,告诉你每个元素长什么样。 但注意——它只管外观,不管逻辑。它不知道点击按钮之后要干什么,更不知道数据要怎么传给数据库。

🗄️ 第二步:Supabase 建数据库(3分钟)

先get一个supabase——

图片

新建项目,

图片

进 Table Editor,新建一张表叫 wishes

图片

加一列,字段名必须叫 content(和前面定的契约一致),类型选 text

图片

然后进设置页面,找 API 那栏,把这两个复制出来备用:

- Project URL :你的数据库地址(ettings → Data API(你还没截到的那页))

- Anon Key :访问密钥(Settings → API Keys → Publishable key)

这两个是之后连接数据库要用的「门牌号和钥匙」。

图片图片

🤖 第三步:让 AI 帮你写连接代码

现在你手里有两样东西:Figma 给的 CSS 样式,Supabase 给的 URL 和 Key。

打开 Cursor(或者 Claudecode、Antigravity),

(软件需要你自己解决,新建项目的方法就是在你电脑本地新建文件夹后直接拖入你装的软件里):

图片

把上面figma里导出的那段代码复制,在项目文件夹里新建一个 figma-style.html

图片

文件粘贴进去,AI 能直接看到它。

然后把下面这段话扔给它,把你的信息替换到我标黄的地方——

我要做一个许愿墙页面。项目里有一个 figma-style.html文件,是 Figma 导出的样式。请用 HTML + JavaScript 引入 Supabase SDK,把那个文件的样式整合进来,页面有一个输入框(id 叫 wishInput)、一个提交按钮(id 叫 submitBtn)、一个列表容器(id 叫 wishList)。点击提交时,把输入框内容存到 Supabase 的 wishes 表,字段名是 content,存完刷新列表显示所有愿望。Project URL 是 [你的URL],Anon Key 是 [你的Key]。做成一个完整的 HTML 文件。

图片

到这里你会看到AI已经按照你设计的UI还原了基本结构。

你会发现 AI 还原的版本跟 Figma 稿不完全一样——这很正常。

Figma 给的是绝对定位的视觉稿,AI 重新用了更合理的布局方式实现它。

外观七八成像,但功能是真实的。如果你要像素级对齐,那是下一阶段的事了。

图片

AI 会给你一段完整代码。

我把关键部分展示一下,让你看清楚发生了什么。先扫一眼汉字就行。

1<!-- HTML:结构来自 Figma 的设计,id 名字自己取 -->
2<input type="text" id="wishInput" placeholder="输入你的愿望...">
3<button id="submitBtn">提交</button>
4<div id="wishList"></div>
5
1// JavaScript:这部分 Figma 给不了,AI 帮你生成
2const { createClient } = supabase;
3const db = createClient('你的Project URL', '你的Anon Key');
4
5document.getElementById('submitBtn').addEventListener('click', async () => {
6    const myWish = document.getElementById('wishInput').value;
7
8    // 注意这里:传给数据库的键名是 content(契约定的那个)
9    await db.from('wishes').insert([{ content: myWish }]);
10
11    loadWishes();
12});
13
14async function loadWishes() {
15    const { data: wishes } = await db.from('wishes').select('*');
16    document.getElementById('wishList').innerHTML =
17        wishes.map(w => [`<p>${w.content}</p>`](https://xplanc.org/primers/document/zh/03.HTML/EX.HTML%20%E5%85%83%E7%B4%A0/EX.p.md)).join('');
18}
19
20loadWishes();
21

整个原理其实是这样的:

图片

❤️ 第四步:规定数据表权限

这个时候你运行还会报错,因为你的数据库没有设置策略,不设置即无法访问

图片

去 Supabase 控制台 → SQL Editor,

图片

粘贴运行下面代码,即设置你的数据访问策略

1-- 1. 先确保 RLS 是开启状态
2ALTER TABLE wishes ENABLE ROW LEVEL SECURITY;
3
4-- 2. 所有人(含未登录)可以查看所有愿望
5CREATE POLICY "public_select"
6ON wishes FOR SELECT
7TO anon
8USING (true);
9
10-- 3. 所有人(含未登录)可以提交愿望
11CREATE POLICY "public_insert"
12ON wishes FOR INSERT
13TO anon
14WITH CHECK (true);
15
16-- UPDATE  DELETE 没有策略 = 默认全部拒绝,无需额外写
17

🏗️ 第五步:想做得更真实,加一层后端

上面这个许愿墙能跑,但还不是真实公司的做法。

真实项目,前端不会直接连数据库。中间会有一层后端 API:

1用户浏览器(前端)→ 你的服务器(后端)→ 数据库
2

为什么要多这一层?

现在你的 Publishable key 写在前端代码里,任何人打开开发者工具都能看到。你写的前端校验逻辑,他们都能绕过,因为那些代码跑在他们自己的机器上,不在你的服务器上。

后端不一样。后端代码跑在你控制的服务器上,用户根本摸不到,所有校验必须经过你。

我们刚才演示的,是supabase充当了你的后端。实际工作中,你的项目本身可以有一个后端。

改成后端版本,变化只有一个地方:

前端不再直接调 Supabase,改成调你的后端接口:

1javascript
2// 之前:直接插数据库
3await db.from('wishes').insert([{ content: myWish }]);
4// 加后端后:调你的接口
5await fetch('/api/wishes', {
6    method: 'POST',
7    headers: { 'Content-Type': 'application/json' },
8    body: JSON.stringify({ content: myWish })
9});
10

想让 AI 帮你搭,给它这段话,在我们前面的提示词上新增的就是标黄的这一句:

_我有一个许愿墙项目,前端目前直接连 Supabase。**现在帮我加一层 Node.js 后端,用 Express 框架。后端提供两个接口:POST /api/wishes 接收 { content } 存进 Supabase 的 wishes 表,GET /api/wishes 返回所有愿望列表。*_后端校验 content 不能为空、不超过 200 字。Supabase 的* URL *和 Secret key 只放在后端**环境变量**里,前端代码里不出现任何密钥。*

然后你的文件结构就会变成

1改造前:
2  浏览器 —— Supabase SDK(含 anon key)——→ Supabase
3
4改造后:
5  浏览器 ——→ Express(/api/wishes)——→ Supabase(service role key 在服务器上)
6

数据库仍然可以丝滑访问,只不过这一次AI会让你在新代码里用另一个key,

Secret key。

图片图片

❤️ 第六步:上线

这个时候你运行还会报错,因为你的数据库没有设置策略,不设置即无法访问

加完后端之后,你的项目就需要一台跑着 Node.js 的服务器——

可以是本地测试

图片

也可以部署到 Vercel、Railway 这类平台,

额度够个人项目用。

比如想直接部署到vercel只用追加这么一段话。

1帮我把它改成 Vercel 能部署的结构:前端放根目录,后端 API 改写成 Vercel Serverless Functions 格式,放在 /api文件夹下(api/wishes.js),同时生成 vercel.json配置文件。Supabase  URL  Secret key 放在 Vercel 环境变量里,不写死在代码中。最后给我一个完整的文件结构和部署步骤
2

ai不但会给你改好文件,而且会告诉你怎么部署

图片

你就跟着做就可以了

图片

我们可以看到在vercel里也可以轻松部署

到此为止

你完成了一个最简单demo的上线,

它作为一个产品是可以被全世界访问的

图片

具体的部署方法可以看我之前写的几种👉🏻

如果这篇文章对你有帮助,请随手点赞、在看、转发三连,让更多人看到。

阿星再次提醒大家,AI编程千万不要一直去点accept,

一定要看看AI说的原理,如果它没说就让它解释,至少自己看懂个大概,

否则你之后去做一些复杂的项目会变得无从下手。

我是阿星,更多AI应用,

我们下期再见👋🏻

图片


一个简单Demo彻底理解前后端怎么连的丨Figma + Supabase + Vercel》 是转载文章,点击查看原文


相关推荐


EasyExcel的使用
脸大是真的好~2026/2/15

需求1:能够导出1个Excel文件,能够导入一个Excel文件; 需求2:导出的文件,能实现第1行,第123列的合并单元格:也就是会写注册处理器;知道sheet和cell是什么; 需求3:能实现合并的单元格设置单元格宽高,背景颜色,内容居中,字体大小; 需求4:能控制从任意行开始写入,并让要输出的字段居中; 需求5:导出能实现从任意行开始读入; 导出Excel文件 <!-- EasyExcel 核心依赖 --> <dependency> <groupId>com.alibaba</gro


提示词工程入门-03
一诺滚雪球2026/2/6

前言 "写个代码" "帮我写个快速排序函数,用 Python 实现,要求时间复杂度 O(n log n),添加详细注释" 同样是让 AI 写代码,为什么第一个指令得到的是模糊的回复,而第二个能得到精确满足需求的代码? 这就是提示词工程(Prompt Engineering)的魔力。 好的 Prompt = 好的输出。今天我们来学习如何写出让 AI "秒懂"的提示词。 1. 什么是提示词工程 提示词(Prompt):你给大模型的输入指令 提示词工程(Prompt Engineering):设计和


耗时 20 天,AI 漫剧 APP 和 Web 全部开源, 已斩获 764 星!
苍何2026/1/28

这是苍何的第 474 篇原创! 大家好,我是消失了一段时间的苍何。 1 月 5 号,我写了篇文章,并开源了 AI 漫剧 APP,获得了很多朋友的喜欢。 然后在 GitHub 上一共获得了 764 星和 181 fork,让我有些吃惊。 说实话,这个项目远超我们的预期,甚至连歪果哥都来给我们提 issue,希望支持双语。 甚至还有老板来咨询问我卖不卖这个 APP,我说,大哥,咱都开源了,自己去整吧,不用付费,哈哈哈。 这或许就是开源的魅力吧。 但我发现,APP 还是不大方便,评论区也不少求


万字长文!搞懂机器学习中的概率图模型
aicoting2026/1/19

推荐直接网站在线阅读:aicoting.cn 概率图模型(Probabilistic Graphical Models, PGM)是一类结合概率论与图论的强大工具,用于描述多个随机变量之间的依赖关系。它通过图结构将复杂的联合概率分布分解为局部条件概率分布,使得对高维数据建模和推断变得可行且高效。 根据图的类型,PGM 可分为有向图模型(如贝叶斯网络)和无向图模型(如马尔可夫随机场)。贝叶斯网络利用有向无环图表示变量之间的因果关系,适合建模因果推断和序列数据;马尔可夫随机场则通过无向图捕捉变量之


WPF样式进阶实战:外置样式+MVVM主题切换+样式优先级全解析
bugcome_com2026/1/11

在WPF开发中,样式(Style)是实现界面美化、统一风格、提高代码复用性的核心利器。但很多开发者在实际项目中,容易陷入「内联样式冗余」「主题切换困难」「样式优先级混乱」的困境,写出难以维护的XAML代码。 今天我们就通过一个完整的模块化实战项目(附全部可运行代码),从「外置样式封装」到「MVVM模式主题切换」,再到「样式优先级核心知识点」,全方位解锁WPF样式的高级用法,最终实现一个支持「浅/深色全局主题切换」「按钮专属样式切换」「传统后台代码样式切换」的完整案例。 一、项目架构梳理:模块化让


2025年终总结,智启
袁庭新2026/1/3

大家好,我是袁庭新。2025年就这么溜走了,对我而言,是极为不寻常的一年,总是想着用文字把它记录下来。 文章输出 写是为了更好的思考,坚持写作,力争更好的思考。 2025年累计发表54篇原创文章,平均1周更1篇,大多数是技术相关。2025年我有个转变——每个月写一篇月总结,对这个月主要做了什么事做一个系统的梳理,尽量以可量化的形式呈现,比如,这个月写了多少篇文章,拍了几条短视频,录了几节课,办了几场讲座等诸如此类。 为什么采用这种方式呢?前些年我也不是没写过年终总结,年底一回顾,感觉又稀里糊涂过


一文带你吃透 Java 反射机制
BestAns2025/12/24

一文带你吃透 Java 反射机制 在Java开发中,“反射”绝对是个让人又爱又恨的知识点。有人觉得它晦涩难懂、破坏封装,也有人靠它实现了各种灵活的功能——比如框架开发、动态配置加载。 其实反射没那么神秘,今天就给大家用最通俗的语言讲清楚:反射到底是什么、怎么用,以及反射在实际开发中的应用。 一、Java反射到底是什么? 我们先从Java的核心特性“封装”说起。平时写代码时,我们通过new关键字创建对象,调用类的方法、访问属性,都是在“编译期”就确定好要操作的类,比如User user = new


为什么说 AI 赋能前端开发,已经不是选择题,而是必然趋势?
西陵2025/12/16

首发于公众号 code进化论,欢迎关注。 前言 这几年 AI 在前端开发里的能力几乎是肉眼可见地进化”。从最早只能帮我们做做代码补全、提示几个参数,例如早期的 comate。到后来能够独立生成一个完整的 React/Vue 组件,连逻辑、样式和交互都能自动写好,例如 cursor 和 claude。再到现在,AI 已经能根据一句自然语言去搭建整个前端项目,自动创建页面、路由、接口层,甚至跑通基础业务流程,例如 v0 和 bolt.new。AI 的角色正在从“聪明的编辑器”变成“能独立干活的虚拟工


计算机十万个为什么--数据库索引
无限大62025/12/8

计算机十万个为什么--数据库索引 大家好,欢迎来到最新一期的无限大博客。 突然发现自己对数据库相关的内容掌握不够扎实,于是就去学习了一下,顺便也将自己的理解写成了一篇博客。 希望这篇文章能对大家有所帮助 数据库索引:给数据仓库装个"智能导航系统" 🧭 想象一下,你走进一个占地 1000 平方米的超级图书馆 📚,里面塞满了几十万本书,却连个分类牌都没有。老板忽然喊你找一本《数据库从入门到放弃》,你是不是当场想表演一个原地消失术?😱 这就是没有索引的数据库的日常!每次查询都像蒙眼找书,全表


失业7个月,我把公司开起来了:一个程序媛的“野蛮生长”
后端小肥肠2025/11/28

大家好,我是小肥肠。 4月被裁,11月注册公司。 这7个月,我一个人赚回了以前一年的工资,也攒够了人生第一台CC的首付。今天不讲技术,聊聊这半年一个程序媛的野蛮生长。 1. 半年了我开起了公司 从4月到现在已经创业半年多了(7个月),这7个月以来,我从一个一无所有的失业人到现在攒够了一台cc的首付(赚的比以前上班一年还多),我的共学社群实现了从0到现在的300多人。 其中有很多和我一样的程序员,他们都是被我的文章吸引来共学群一起成长,也有很多小白进来一步一步成长为可以自行搭建自己的智能体。 在这

首页编辑器站点地图

本站内容在 CC BY-SA 4.0 协议下发布

Copyright © 2026 XYZ博客