基于MemFireCloud的电子图书馆开发指南(二)

73 阅读2分钟

TL;DR

上一篇教程中已经实现了从epub文件中提取元数据并写入数据库,本篇内容会基于业务需求,利用MemFireCloud快速生成业务接口,并利用其云存储的能力,实现文件静态托管。

仓库地址

github.com/key7men/e-b…

业务需求带来的接口需求

功能设计

我想要的电子图书馆,就两个核心功能:

  • 可以通过书名模糊搜索,并实时显示搜索结果
  • 命中搜索目标后,可以直接阅读或离线下载

界面设计

明确了功能点,对应的页面设计如下:

  • 搜索列表页面

img

  • 在线阅读页面

img

接口需求

通过上述界面的分析,我们仅仅需要实现以下接口,即可完成业务

  • 一个可以分页返回搜索结果列表的接口
  • 一个可以获得具体书籍地址的接口

接口实现

当我在上一篇文章中创建ebook应用及数据表的时候,MemFireCloud就已经为我创建的表生成了CRUD接口,切换到API文档这个界面,很容易就能找到过滤数据的接口调用方式。

img

那我们照葫芦画瓢,写一个书名中包含数字"2",且只返回前两项结果的接口试试,创建一个名为api.ts的文件:

import { createClient } from '@supabase/supabase-js'const url = 'your_url';
const key = 'your_key';
const client = createClient(url, key);
​
(async () => {
    let {data, error} = await client
        .from('book')
        .select('*')
        .range(0,1)
        // Filters
        .ilike('title', '%%')
​
    if (error) {
        console.error(error)
    } else {
        console.log(data)
    }
})();

将上述ts文件编译成js后执行,tsc api.ts && node api.js,可以看到输出了如下结果:

img

云存储的使用

仔细观察结果,你会发现上述输出中,书籍文件路径link和封面文件路径cover_link都能拿到,但问题是这些文件不是在本地吗?(上一篇文章中已经提取了相应数据)? 无妨,可以将本地图书与封面文件悉数上传到MemFireCloud提供的云存储服务中。

Bucket创建

bucket本质就是带有权限的根目录。我们创建两个bucket并上传对应的文件,一个用于存储图书,叫作books;一个用于存储封面,叫作covers同时设置这两个bucket公开化,以确保访问不受任何权限限制。

img

尝试访问

切换到covers这个bucket,任意选择一个文件,复制链接,打开浏览器隐匿模式发现依然可以访问即可。

img

小结

本文介绍了如何利用MemFireCloud基于创建的表结构快速生成CRUD接口,同时尝试使用云存储来实现文件的持久化,最终能通过接口返回的文件路径拼接一个前置URL,来达到查看封面,下载文件的目的。