续集来了!我让 GPT-4 用 Laf 三分钟写了个完整的待办事项 App
书接前文,上篇文章我们教大家如何三分钟时间用 Laf 实现一个自己的 ChatGPT。
一觉醒来,GPT-4 已经发布了!
GPT-4 实现了真正的多模态,可以把纸笔画的原型直接写出网页代码。读论文时还能理解插图含意。
好消息是,ChatGPT Plus 用户目前可以提前尝鲜 GPT-4 模型。作为高贵的 Plus 用户,这怎么能忍?立马打开 ChatGPT 切换到最新模型。

一位 Twitter 网友经过测试发现,使用了 GPT-4 模型的 ChatGPT 编码能力有了显著的提高,甚至可以写出一个完整的工程出来。

既然如此,我有一个想法,先把 Laf 的所有文档内容喂给它,然后再让它给我写一个完整的待办事项 App。不知道它能不能完成这个任务呢?

一顿操作猛如虎训练完文档后,开始正式对它进行考试:









我按照它提供的代码编写云函数和前端项目代码,最后竟然真的成功运行了:

看来能力确实很强啊,可以正常插入数据,竟然毫无 bug。本文到此结束,完结撒花~~
接下来所有的内容都是针对 GPT-4 回复内容的解读和注解,以帮助读者使用 Laf 从零开发一个简单的待办实现 App
准备工作
- 你需要在 laf.dev 上注册一个账户。
- 登录到 laf.dev,点击
新建按钮,创建一个空应用。 - 待应用成功启动后,点击右侧 「开发」 按钮,进入应用的「开发控制台」,接下来,我们将在「开发控制台」 进行第一个
laf应用的功能开发。
编写云函数
首先需要创建一个云函数。

然后在 getTodos 云函数中写上以下代码,写完以后记得在右上角找到 「发布」两个字,点一下发布。
import cloud from '@lafjs/cloud'
const db = cloud.database()
export async function main(ctx: FunctionContext) {
// 调用云数据库的 get() 方法从 "todos" 集合中查询所有待办事项
const todos = await db.collection('todos').get()
// 将查询到的待办事项数据返回给前端
return todos
}
按照刚刚的方式我们再创建 addTodo updateTodo 这两个云函数,并分别写入代码。
import cloud from '@lafjs/cloud'
const db = cloud.database()
export async function main(ctx: FunctionContext) {
// 从前端传来的数据中提取 content(待办事项内容)
const { content } = ctx.body
// 创建一个新的待办事项对象,包含 content 和 completed(是否完成)两个属性
const newTodo = {
content,
completed: false,
}
// 调用云数据库的 add() 方法将新的待办事项添加到 "todos" 集合中
const res = await db.collection('todos').add(newTodo)
// 将添加操作的结果返回给前端
return res
}
import cloud from '@lafjs/cloud'
const db = cloud.database()
export async function main(ctx: FunctionContext) {
// 从前端传来的数据中提取 id(待办事项的唯一标识)和 data(待更新的数据)
const { id, data } = ctx.body
// 调用云数据库的 where() 方法筛选出指定 id 的待办事项
// 然后调用 update() 方法更新该待办事项的数据
const res = await db.collection('todos').where({ _id: id }).update(data)
// 将更新操作的结果返回给前端
return res
}
再次提醒,更改过的每一个云函数都需要 「发布」才能生效哦!
创建集合
这里的集合,对应着传统数据库的表,用来存储数据。

前端
前端这里我们用的是 Vue 项目来演示,React/Angular/小程序,操作都是相同的。
首先需要在前端项目中安装 laf-client-sdk。
$ npm install laf-client-sdk
还记得刚创建完项目的页面吗,我们需要回到那里找到我们需要用到的<APPID>。

引入并创建 cloud 对象,这里需要注意的是<APPID>需要换成自己的。
import { Cloud } from "laf-client-sdk"; // 引入
// 创建cloud对象
const cloud = new Cloud({
baseUrl: "https://<AppID>.laf.dev", // 这里的 <AppID> 需要换成自己的 AppID
getAccessToken: () => '', // 这里先为空
});
然后我们在前端需要的地方调用我们的云函数。
// 获取待办事项列表
async function fetchTodos() {
// 调用云函数 "getTodos" 来获取待办事项
const res = await cloud.invoke("getTodos")
// 将获取到的待办事项数据存储在 todos.value 中
todos.value = res.data
}
// 添加新的待办事项
async function addTodo() {
// 如果输入框的值为空,则直接返回
if (!newTodo.value.trim()) return
// 调用云函数 "addTodo",添加新的待办事项,传递输入框的值
await cloud.invoke("addTodo", { content: newTodo.value.trim() })
// 清空输入框的值
newTodo.value = ""
// 刷新待办事项列表,以显示新添加的待办事项
await fetchTodos()
}
// 更新待办事项的状态
async function updateTodo(todo) {
// 调用云函数 "updateTodo",更新待办事项的完成状态
await cloud.invoke("updateTodo", {
id: todo._id, // 传递待办事项的唯一 ID
data: { completed: todo.completed }, // 更新完成状态
})
}
到这里我们已经完成了项目的核心功能,可以正常插入数据:

从上述步骤可以看出,整个 App 的后端都托管在 Laf 中,不需要自己准备服务器、搭建服务等等,只需要专注于业务逻辑即可。
除了后端之外,前端能不能也托管在 Laf 中呢?完全没问题!参考上篇文章。
不过细心的同学应该发现了,ChatGPT 给出的代码中并不包含删除的功能,你可以按照本文给出的思路继续让 ChatGPT 完善代码,或者可以直接参考 Laf 的官方文档:
续集来了!我让 GPT-4 用 Laf 三分钟写了个完整的待办事项 App的更多相关文章
- GPT vs MBR 分区 ,,, Legacy BIOS vs UEFI BIOS
MBR与GPT两种磁盘分区格式的区别 http://itoedr.blog.163.com/blog/static/120284297201378114053240 GPT Partition Tab ...
- Legacy和UEFI,MBR和GPT的区别
Legacy(历史的,遗留的,传统的)和UEFI指的是系统引导方式(Legacy为传统BIOS,UEFI为新式BIOS),MBR和GPT指的是磁盘分区表类型. 一般情况下都是Legacy+MBR, U ...
- centos下为大硬盘分区(大于2T)
问题:centos/redhat下使用分区工具fdisk创建大于2TB的分区,无法创建 关键字:MBR.GPT.CHS.LBA MBR:主引导记录 GPT:GUID 分区表 CHS:磁柱 磁头 扇区 ...
- 安装 Linux 时碰到的硬盘分区的陷阱及应对
硬盘分区的陷阱及应对 之所以想到写这篇,是因为本人在折腾 Linux 系统的过程中,有多次掉入硬盘分区的陷阱的经历.最近几天,再一次掉入坑中,折腾了两天才从坑中爬出来.经过多方查询资料,终于弄明白了硬 ...
- 安装Ubuntu时,遇到自定义交换空间swap大小设置问题
【整理】Ubuntu自定义分区设置 在安装Ubuntu时,如果使用的是一个新硬盘那么安装向导会建议你使用整个硬盘,如果硬盘上已经有数据了,向导会建议使用剩余的空间。不管怎样,是由向导自动划分的分区。 ...
- 前端——HTML
HTML HTML叫做超文本标记语言,是一种制作万维网页面标准语言.相当于定义一套规则,大家都来遵守它,这样浏览器就可以去解释它. 浏览器负责将标签翻译成用户看得懂的格式,呈现给用户. 作为开发者需要 ...
- Linux:Gentoo系统的安装笔记(一)
这次我选择安装Gentoo,用来做我学习的笔记.这次我是使用虚拟机安装Gentoo,一是方便操作,二是可以看着手册,一边看一边操作,严格按照手册上的步骤执行,一般是不会出现问题的. 查看手册最好学会看 ...
- 【教程】在UEFI启动方式下,通过GRUB2引导,直接从硬盘ISO文件安装Windows10和Ubuntu双系统
本文为作者原创,允许转载,但必须注明原文地址: https://www.cnblogs.com/byronxie/p/9949789.html 动机 最近在自学MIT6.828 Operating S ...
- Smart Framework:轻量级 Java Web 框架
Smart Framework:轻量级 Java Web 框架 收藏 黄勇 工作闲暇之余,我开发了一款轻量级 Java Web 框架 —— Smart Framework. 开发该框架是为了: 加 ...
- 转载-好用的linux软件合集
音频 Airtime – Airtime 是一款用于调度和远程站点管理的开放广播软件 Ardour – 在 Linux 上录音,编辑,和混音 Audacious – 开源音频播放器,按你想要的方式 ...
随机推荐
- 20211306丁文博 python技能树、CSDN MarkDown编辑器
测评内容: python技能树.CSDN MarkDown编辑器 指导老师:王志强 班级:2113 学号:20211306 姓名:丁文博 https://blog.csdn.net/weixin_62 ...
- 浏览器垃圾回收机制:栈垃圾回收、堆垃圾回收、新生区老生区、Scavenge算法、标记-清除算法、标记-整理算法、全停顿、增量标记
浏览器垃圾回收机制根据数据的存储方式分为栈垃圾回收和堆垃圾回收. 栈垃圾回收的方式非常简便,当一个函数执行结束之后,JavaScript 引擎会通过向下移动 ESP 来销毁该函数保存在栈中的执行上下文 ...
- 【python】绘图,画虚线
linestyle='--' plot画线时候加linestyle='--'. 参考:python 画图-标注点,画虚线_GXLiu-CSDN博客_python画虚线
- 【jmeter】请求域名解析失败,添加本地代理
jmeter HTTP请求URL中使用域名 http://xxx.xxx.xxx,异常:java.net.UnkownHostException 原因:请求域名没有被解析成功,该http请求没有通过本 ...
- nuxt,js中关于服务端不能使用localStorage和cookie的解决方案
参考链接:https://www.npmjs.com/package/cookie-universal-nuxt 1.安装下载 npm i --save cookie-universal-nuxt 2 ...
- 狐漠漠养成日记 Cp.00001 开始养成计划
开始养成计划 今天是我开始这个"狐漠漠养成计划"的第一天(划掉). 看来是昨天出门前忘记保存了,昨天写的几百字内容全都没有了,今天其实已经是计划开始的第二天了. 因为昨天晚上出去喝 ...
- DataRow[]数组转换为DataTable
DataRow[] drData=DataTable.Select("....."); DataTable dtNew=drData.CopyToDataTable(); 注:Da ...
- centos 挂载共享目录
共享目录://10.253.47.102/share/文件传递暂用 将共享路径挂载到centos /etc/fstab 添加一行配置,mount -a 生效
- 学习JavaScript第四周
创建闭包的四个条件: 1.要有函数嵌套,且里层函数要操作外层函数被保护的变量. 2.返回里层函数 3.里层定义的函数要被调用,哪怕是返回一个匿名函数也行. 4.用一个变量接住,方便后续的使用. 注意: ...
- vue-多个卡片翻转动效
<van-grid :column-num="2" class="content" :border="false" > < ...