吓坏了DIY互动创作,胆小勿入?

本文介绍如何使用MemFireCloud快速搭建恐怖故事创作平台Spooked,包括数据库创建、表结构设计及触发器设置等关键技术点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

MemFire Cloud是一款提供云数据库,用户可以创建云数据库,并对数据库进行管理,还可以对数据库进行备份操作。它还提供后端即服务,用户可以在1分钟内新建一个应用,使用自动生成的API和SDK,访问云数据库、对象存储、用户认证与授权等功能,可专注于编写前端应用程序代码,加速WEB或APP应用开发。

最近在研究MemFire Cloud,正好改编了一个小项目。虽然投稿活动没有通过审核,但是官方认为我这个例子还不错,所以受邀写了这篇文章分享。本人是一个前端开发出身的程序媛,在使用MemFire Cloud过程中却出奇的顺畅,主要是数据库方面的操作对前端或者说数据库不太熟悉的人比较友好。接下来讲讲我的项目。Spooked(吓坏了)是一个可以讲恐怖故事的小应用,包括你的噩梦或者一些恐怖小故事。别人也可以接着你的故事继续写,根据提示写出自己的创意结局的DIY互动创作平台。胆小勿入哦~

下载代码

项目最终代码(代码不需要做修改,只需要提供supabaseUrl和supabaseKey和创建数据表初始化即可运行)

https://github.com/LucaRao/Spooked.git

创建应用

我们就是通过在这里创建的应用来获得数据库、云存储等一系列资源,并获得该应用专属的API访问链接和访问密钥,就可以轻松的与以上资源进行交互。

登录MemFire Cloud创建应用,并获取服务地址以及token信息

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GmCvVorA-1664088069090)(https://g8nb5c2xl3.feishu.cn/space/api/box/stream/download/asynccode/?code=ZTg5Y2MyNGI0Yjk4OGM3ZDlhMjUyOGYzNGMwOGIwOWRfTllTVXVkSk1RcVVMYldHVksyMm5UZXFnaDhjS1FIS09fVG9rZW46Ym94Y244enZxeVR2YTNzT1hyb28wVHdyUXFkXzE2NjQwODgwNTE6MTY2NDA5MTY1MV9WNA)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fELqpMNo-1664088069092)(https://g8nb5c2xl3.feishu.cn/space/api/box/stream/download/asynccode/?code=NDFlM2I3MWQ1MTJlOTU4MWZkNWZiM2VhMDU5Yjc4ZWJfWk9meXMxaGQ3MVR1V1JoZ1RDU1JVaVk0U0JJUktld0lfVG9rZW46Ym94Y25jWDhsNjdjaEpYQlRwWld6STBPTE1kXzE2NjQwODgwNTE6MTY2NDA5MTY1MV9WNA)]

Anon public是客户端API密钥。它允许“匿名访问”我们的数据库,直到用户登录。登录后,密钥将切换到用户自己的登录令牌。这将为数据启用行级安全性。 注意:service_role secret可以绕过任何安全策略完全访问我们的数据。这些密钥必须保密,并且要在服务器环境中使用,决不能在客户端或浏览器上使用。 在后续示例代码中,需要提供supabaseUrl和supabaseKey。

配置访问秘钥

将上一步中获取的anon public和网址分别设置到supabaseUrl和supabaseKey中

在根目录.env文件里

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wmgT69EI-1664088069092)(https://g8nb5c2xl3.feishu.cn/space/api/box/stream/download/asynccode/?code=OWVkZTFjZTRkMzgxOTY1Nzc4OGY3MWFkZWVjNmNkZjlfWXZ0TWVUMjBYUkYxWVFNNHlySzR1YkV4UWpyMDc2eUxfVG9rZW46Ym94Y25qNk4xNXNFdDh5THdCamFhVUJITnhiXzE2NjQwODgwNTE6MTY2NDA5MTY1MV9WNA)]

创建数据表

account表:用户表

名称类型描述
iduuid主键,自增,每条评论的唯一标识ID
joined_attimestampt创建时间
emailtext用户名

posts表:故事列表

名称类型描述
idint8主键,自增,每条评论的唯一标识ID
created_attimestampt创建时间
updated_attimestampt用户名
titletext标题
bodytext内容
authoriduuid与auth.users id关联

replies表:评论表

名称类型描述
idint8主键,自增,每条评论的唯一标识ID
created_attimestampt创建时间
postidint8文章id
authoriduuid与auth.users id关联
bodytext内容

reports表:回复评论表

名称类型描述
idint8主键,自增,每条评论的唯一标识ID
created_attimestampt创建时间
created_byUUID回复人员
reported_postint8被留言的post的id
reported_userUUID留言人员
descriptiontext回复内容

(1)创建表

视图化表结构编辑器创建表形式:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9a1ZKZHC-1664088069093)(https://g8nb5c2xl3.feishu.cn/space/api/box/stream/download/asynccode/?code=OTlhZDU1MzliYTMxYWFiMjg4ZjU1MTkxOWU2NWE4NGJfVVlaZTFLUVpNU2VYSzhMZElNR3gwSUp3Z2tXZW5sczVfVG9rZW46Ym94Y25yeXEwVFlVZ09tNmRSN0dSR0R1TG5iXzE2NjQwODgwNTE6MTY2NDA5MTY1MV9WNA)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3ndzbJyU-1664088069093)(https://g8nb5c2xl3.feishu.cn/space/api/box/stream/download/asynccode/?code=OWZiNGUzNGYzOGM2YWEzYzA4OTc0YmZhNjg3NGNiOGNfSFN5SFZZd2lmNVVaR2oyaDNScUdPeDdLcklmUXFzeGFfVG9rZW46Ym94Y25BSGMzd21SdkNvRVVxSzFIbGE4V09kXzE2NjQwODgwNTE6MTY2NDA5MTY1MV9WNA)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-J1AR89gO-1664088069094)(https://g8nb5c2xl3.feishu.cn/space/api/box/stream/download/asynccode/?code=NjY0OTRkYzlmOTQ4ODI5ZTUzYmVjMTVjZDBjZjE3NDRfMFFSYTBPVkhnS0FLWWxNR3BmOXQ4dmxOVDFOb21FbjZfVG9rZW46Ym94Y25QeldkT2laZmRGRHR2WEpTQVRheVhiXzE2NjQwODgwNTE6MTY2NDA5MTY1MV9WNA)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WvB4wUaN-1664088069094)(https://g8nb5c2xl3.feishu.cn/space/api/box/stream/download/asynccode/?code=NzQ0OWIwZWY5MjdiYzMzYjA0ZjA5ZmQ3NGI4ZDg2YmFfaVNyN2FWejRhb3JpSDZLYzFicXo1bWk4ckNxNXo0ZUxfVG9rZW46Ym94Y25FOVJKWk1GT04xMkJ3ZUpJcDVNeXhjXzE2NjQwODgwNTE6MTY2NDA5MTY1MV9WNA)]

sql语句创建表形式:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-b2Zufdjm-1664088069094)(https://g8nb5c2xl3.feishu.cn/space/api/box/stream/download/asynccode/?code=MWY5OTYwNzc1Yzk4ZjcyODkzMjc0ZDdmZjYyZDBkN2RfQm0xMVlkbXZEVmJDc0J5SVdtbDFYOWtDbGNGVVVoSm9fVG9rZW46Ym94Y25wY0xuQkg3R0dtemVLbHlLV1lmYk5nXzE2NjQwODgwNTE6MTY2NDA5MTY1MV9WNA)]

 CREATE TABLE "public"."account" ( 
  "id" UUID NOT NULL,
  "joined_at" TIMESTAMP,
  "email" TEXT NOT NULL,
  CONSTRAINT "account_pkey" PRIMARY KEY ("id")
);

CREATE TABLE "public"."posts" ( 
  "id" SERIAL,
  "created_at" TIMESTAMP,
  "updated_at" TIMESTAMP,
  "title" TEXT NOT NULL,
  "body" TEXT NOT NULL,
  "authorid" UUID NOT NULL,
  CONSTRAINT "posts_pkey" PRIMARY KEY ("id"),
  CONSTRAINT "posts_authorid_fkey" FOREIGN KEY ("authorid") REFERENCES "auth"."users" ("id") ON DELETE NO ACTION ON UPDATE NO ACTION
);

CREATE TABLE "public"."replies" ( 
  "id" SERIAL,
  "created_at" TIMESTAMP,
  "postid" BIGINT NOT NULL,
  "authorid" UUID NOT NULL,
  "body" TEXT NOT NULL,
  CONSTRAINT "replies_pkey" PRIMARY KEY ("id"),
  CONSTRAINT "replies_authorid_fkey" FOREIGN KEY ("authorid") REFERENCES "auth"."users" ("id") ON DELETE NO ACTION ON UPDATE NO ACTION,
  CONSTRAINT "replies_postid_fkey" FOREIGN KEY ("postid") REFERENCES "public"."posts" ("id") ON DELETE NO ACTION ON UPDATE NO ACTION
);

CREATE TABLE "public"."reports" ( 
  "id" SERIAL,
  "created_at" TIMESTAMP,
  "created_by" UUID NOT NULL,
  "reported_post" BIGINT NOT NULL,
  "reported_user" UUID NOT NULL,
  "description" TEXT NOT NULL,
  CONSTRAINT "reports_pkey" PRIMARY KEY ("id")
);

(2)创建触发器

创建完表后,在相应的数据库sql编辑器里面创建触发器

-- Updates a row in public.posts
create or replace function public.handle_updated_at() 
returns trigger as $$
begin
  update posts 
     set updated_at = new.created_at 
   where id = new.postid;
  return new;
end;
$$ language plpgsql security definer;

-- Trigger the function every time a user is created
create trigger on_new_reply
  after insert on public.replies
  for each row execute procedure public.handle_updated_at();

-- Inserts a row into public.account
create or replace function public.handle_new_user() 
returns trigger as $$
begin
  insert into public.account (id, email)
  values (new.id, new.email);

  return new;
end;
$$ language plpgsql security definer;

-- Trigger the function every time a user is created
create trigger on_auth_user_created
  after insert on auth.users
  for each row execute procedure public.handle_new_user();

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JegdgP4g-1664088069095)(https://g8nb5c2xl3.feishu.cn/space/api/box/stream/download/asynccode/?code=ZWZiZTc4Y2M4OTJhOWRiNDI4MWU2MWZmMGIzYWU1ODVfelc4b0lxZ3BxSGFiUEFzWk9nOXJ6TXRGak9UOEFJWkVfVG9rZW46Ym94Y25YUDhYWEVNenk5aHY4Qks0VnFEcHBjXzE2NjQwODgwNTE6MTY2NDA5MTY1MV9WNA)]

运行程序

node -v # v14.16.0
npm install
npm run dev -- --open

认证设置

认证设置,使用本地的IP地址来替换认证设置中的网站地址和其他重定向URL。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qVR8ollT-1664088069095)(https://g8nb5c2xl3.feishu.cn/space/api/box/stream/download/asynccode/?code=NDUwYTNiYjE2ZmNjOTE2NzBiNmYxODg5NmNjNDUxZWZfYW1zRG00NG5vNW5IUHBIWDVWdEhybDR5NnJxcWxSVXhfVG9rZW46Ym94Y25wa3R1cTRCRDB2R1FxdTc5NXhGOERjXzE2NjQwODgwNTE6MTY2NDA5MTY1MV9WNA)]

点击登录页面,如下图所示,输入注册邮箱,应用会发送确认注册邮件。登录注册邮箱后,打开最新收到的确认注册邮件,点击链接,完成注册操作,即可登录论坛。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-db9b3XZX-1664088069095)(https://g8nb5c2xl3.feishu.cn/space/api/box/stream/download/asynccode/?code=YTcwZGQwNzU5MWQ5Y2I3YzFiNDFmYmMzNTIzMjJhZGFfS29WMmZZbDAwMTdOOVNFUXo5UVRsWW01enV5NUFyTHBfVG9rZW46Ym94Y25pWkNRc0l3M3NPZm1zNzFFMDJ4cnVlXzE2NjQwODgwNTE6MTY2NDA5MTY1MV9WNA)]

程序界面如下图

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-baMtyiZK-1664088069096)(https://g8nb5c2xl3.feishu.cn/space/api/box/stream/download/asynccode/?code=ZGM1ZjRjNjhjNjcwYzk4OGUzZTAzYWMzN2M0YTdmZWNfUTBHQzY4NlhFdkdLaDRBUkQ1SmowaW5hSlpEU0ptWVVfVG9rZW46Ym94Y25ZZkNrMFByNzJJZDhmcnFQd2w0a2hoXzE2NjQwODgwNTE6MTY2NDA5MTY1MV9WNA)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VzuNy57j-1664088069096)(https://g8nb5c2xl3.feishu.cn/space/api/box/stream/download/asynccode/?code=ZGJjZWQ2ZmY0NGQxNTU2ZGU2ZjM5ODViZjIxOGYwMjJfMkg5QVNJOG9iU3NyeDV3OVNqSDd1eDNIYllOaGtLVkJfVG9rZW46Ym94Y25MbEYzUFhPeFRhUDlGY2wyTVp0SVBkXzE2NjQwODgwNTE6MTY2NDA5MTY1MV9WNA)]

小结

以上就是Spooked(吓坏了)项目开发的全部步骤,可以看到,除了我自己开发代码的过程以外,在MemFire Cloud上的操作还是挺简单的,没有复杂的界面操作,也没有复杂的需要学习的语法之类的技术,而且还是免费的。唯一我觉得不够便捷的可能就是文档不太完善,不太能容易找到自己想要的模块的介绍,这一点希望官方可以进一步完善,总体来说,我觉得MemFire Cloud还是可以充当我们开发小应用的头号标选。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值