龙空技术网

为什么您应该在下一个项目中使用 PocketBase

启辰8 144

前言:

今天我们对“basejs”都比较注重,你们都需要了解一些“basejs”的相关知识。那么小编同时在网摘上汇集了一些有关“basejs””的相关文章,希望我们能喜欢,朋友们快快来学习一下吧!

PocketBase 是一个开源后端即服务平台,作为可自托管的单个可执行文件提供。为了在生产中使用 PocketBase,您必须自己托管它。这与 Supabase 和 Firebase 等平台形成鲜明对比。PocketBase 附带了一个成熟的身份验证模块、一个嵌入在可执行文件中的 SQL lite 数据库以及一个文件存储 API,使其能够简洁地满足您的所有需求。

PocketBase 是用 Go 编写的,速度非常快,它配备了内置的管理仪表板,您可以在其中监视您的用户、数据库和文件。您还可以自定义用于发送电子邮件的 STMP 配置。PocketBase 还提供了一个用于与服务器交互的 API,但是有一个包可以用一些流行的语言(如 Javascript 和 Dart)与服务器交互。

PocketBase 非常容易设置和使用,在这篇文章中,我将向您展示如何在 PC 上设置 PocketBase,然后我们还将设置一个 Svelte 项目来与 PocketBase 服务器交互。我们将在这篇文章中考虑以下内容。

在本地下载、安装并设置 PocketBase。设置 Svelte 项目。安装 PocketBase 客户端并在我们的应用程序中设置身份验证为什么选择 PocketBase?您应该使用它吗?下载 PocketBase

要开始使用 PocketBase,请前往文档页面下载适用于您的 PC 的可执行文件。PocketBase 捆绑在一个 zip 文件中,因此您需要首先从存档中提取文件。完成后,打开终端,导航到刚刚解压的最新 PocketBase 服务器,并运行以下命令pocketbase server来启动 PocketBase 服务器。访问查看您的管理仪表板,因为这是您第一次使用 PocketBase,您需要创建一个新的管理帐户。如果您成功完成此操作,您应该会被重定向到您的仪表板,您可以在其中查看和管理您的 PocketBase 服务器。现在已经完成了,让我们建立一个 Svelte 项目。

设置 Svelte 项目

我们将使用 Vite 设置这个 Svelte 项目,以便运行以下命令。

$ npm create vite@latest test_app --template svelte

按照提示设置项目,如果一切成功,请运行以下命令。

$ cd test_app && npm install

上面的命令首先导航到新创建的 Svelte 项目,然后我们从 npm 安装该项目的依赖项。安装完成后,运行下一个命令在本地启动该项目,以验证一切是否设置成功。

$ npm run dev

如果您获得 Svelte 和 Vite 项目附带的默认 UI,那么您就可以开始了。接下来,让我们为 Svelte 项目安装一个路由器。

$ npm install svelte-routing

这是我在 Svelte 项目中用于路由的默认包。现在让我们为此项目设置 UI。请耐心等待,因为我不会向 UI 添加任何样式。它会尽可能小,这样就不会妨碍。创建一个在Svelte 项目文件夹pages内命名的新文件夹。src在pages文件夹内创建一个名为的新 Svelte 组件signup.svelte

// src/pages/signup.svelte<script>  let name = '';  let email = '';  let password = '';  $:loading = false</script><main>  <h3>Logout</h3>  <form>    <label for="name">Name</label>    <input type="text" bind:value={name} id="name" placeholder="John Doe" /><br />    <label for="email">Email</label>    <input type="email" bind:value={email} id="email" placeholder="email@domain.com" /><br />    <label for="password">Password</label>    <input type="password" bind:value={password} id="password" placeholder="***" /><br />    {#if loading}    <button disabled={loading}>      loading...    </button>    {:else}      <button type="submit">        register      </button>    {/if}  </form></main><style>  form {    padding: 3rem  }</style>

除了一个包含三个输入的表单之外什么也没有,一个用于用户名,另一个用于用户的电子邮件,一个用于密码。让我们添加一个登录组件。

// src/pages/login.svelte<script>  let email = '';  let password = '';  $:loading = false</script><main>  <h3>Login</h3>  <form on:submit|preventDefault={() => Signin(email, password)}>    <label for="email">Email</label>    <input type="email" bind:value={email} id="email" placeholder="email@domain.com" /><br />    <label for="password">Password</label>    <input type="password" bind:value={password} id="password" placeholder="***" /><br />    {#if loading}    <button disabled={loading}>      loading...    </button>    {:else}      <button type="submit">        register      </button>    {/if}  </form></main>

最后,让我们添加最后一个组件,该组件将用作用户登录时将看到的仪表板页面。

// src/pages/index.svelte<script>  $:currentUser = {};</script><h1>Current user {currentUser?.email}</h1><button>Logout</button>

现在我们已经添加了组件,让我们设置路由器,因此继续编辑文件夹App.svelte内的文件src并将其粘贴到以下内容中。

// src/app.svelte<script>  import {Router, Route} from 'svelte-routing'  import Login from "./pages/login.svelte";  import Signup from "./pages/signup.svelte";  import Index from './pages/index.svelte';  export let url = "/";</script><Router {url}>  <Route path="/">    <Signup />  </Route>  <Route path="/login">    <Login />  </Route>  <Route path="/dashboard">    <Index />  </Route></Router>

您可以npm run dev再次运行以确认一切正常,现在让我们继续安装 PocketBase Javascript 客户端。

安装 PocketBase 客户端。

要安装 PocketBase Javascript 客户端,请运行以下命令;

$ npm i pocketbase

如果您完成了 PocketBase 客户端的安装,请在文件夹helper.js内创建一个名为的新文件src。该模块将包含与 PocketBase 服务器交互的代码。让我们添加第一个函数来创建新用户帐户。

// src/helper.jsimport PocketBase from 'pocketbase';const pb = new PocketBase(';);export const signUp = async ({name, email, password}) => {  try {    const user = await pb.collection('users').create({      email,       name,       password,       passwordConfirm: password    });    return [null, user];  } catch (error) {    return [error, null]  }}

上面的代码片段首先PocketBase从pocketbase包中导入模块。该模块提供了用于与 PocketBase 交互的 JavaScript API。然后我们创建一个新的PocketBase客户端实例并指定 PocketBase 服务器的 URL。然后我们定义一个名为 的函数signUp。该函数接受三个参数:用户名、电子邮件地址和密码。

该函数首先尝试在集合中创建新的用户记录users。该create()方法采用一个对象作为参数,该对象指定新用户记录的属性。在本例中,该对象指定用户的电子邮件地址、姓名、密码和密码确认。如果该create()方法成功,该函数将返回一个包含两个元素的数组:第一个元素是null,第二个元素是新创建的用户记录。如果该create()方法失败,该函数将返回一个包含两个元素的数组:第一个元素是错误对象,第二个元素是null。

让我们添加用户登录的功能。

// helper cont'dexport const login = async (email, password) => {  try {    const authData = await pb.collection('users').authWithPassword(      email,      password  );  return [null, authData];  } catch (error) {    return [error, null]  }}

现在让我们使用我们从注册页面开始在组件中定义的辅助函数。

// src/pages/signup.svelte<script>  import {signUp} from '../helper';  import {navigate} from 'svelte-routing'  const Signin = async (email, password, name) => {    loading = true    const [error, authData] = await signUp({email, password, name});    loading = false    if (error) {      console.error(error)    } else if (authData) {      console.log(authData);      alert('account created successfully!')      navigate('/login', { replace: true })    }  }  let email = '';  let password = '';  let name = '';  $:loading = false</script><main>  <h3>Logout</h3>  <form on:submit|preventDefault={() => Signin(email, password, name)}>   {/* ...other parts of the form */}  </form</main>

signUp我们从帮助程序文件中导入该函数。该函数是我们在第一个代码片段中定义的函数。navigate然后我们从包中导入该函数svelte-routing。该函数用于导航到应用程序中的不同页面。然后我们定义一个名为 的函数Signin。该函数接受三个参数:用户的电子邮件地址、密码和姓名。该函数首先调用该signUp函数,传入用户的电子邮件地址、密码和姓名。SignUp 函数返回一个包含两个元素的数组:第一个元素是错误对象,第二个元素是新创建的用户记录(如果成功)。

然后该函数检查错误对象。如果错误对象不为空,则该函数将错误记录到控制台。如果错误对象为空,则该函数会将新创建的用户记录记录到控制台。然后,该功能会提醒用户其帐户已成功创建,并导航到登录页面。让我们设置login页面的集成。

// src/pages/login.svelte<script>  import { navigate } from 'svelte-routing';  import {login} from '../helper';  const Signin = async (email, password) => {    loading = true    const [error, authData] = await login(email, password);    loading = false    if (error) {      console.error(error)    } else if (authData) {      console.log(authData);      navigate('/dashboard', {replace: true})    }  }  let email = '';  let password = '';  $:loading = false</script><main>  <h3>Login</h3>  <form on:submit|preventDefault={() => Signin(email, password)}>    {/* continued... */}  </form></main>

最后,让我们添加仪表板页面的集成。

// src/pages/index.svelte<script>  import { navigate } from 'svelte-routing';  import pb from "../helper";  console.log(pb.authStore.model);  $:currentUser = pb.authStore.model;  pb.authStore.onChange((auth) => {    console.log('authStore changed', auth);    currentUser = pb.authStore.model;  });  function signOut() {    pb.authStore.clear();    navigate('/login', {replace: true})  }</script><h1>Current user {currentUser?.email}</h1><button on:click={() => signOut()}>Logout</button>
为什么选择 PocketBase?您是否应该使用它?

PocketBase 是 Supabase 和 Firebase 的一个非常好的替代品,特别是如果您想自己托管它。PocketBase 也是开源的,因此您可以确信代码不受某些大型科技公司的控制。PocketBase 也非常快速和可靠。如果您的应用程序需要后端服务,它将为您节省数小时的开发时间,并且让您专注于重要的事情。提供良好的用户体验。

因此,如果您正在考虑构建一些令人惊叹的东西,但您没有时间投资从头开始构建后端,或者您没有构建所需的技能或没有钱聘请后端工程师,那么您可以使用 PocketBase 和由于您必须自己托管它,因此您不必担心供应商锁定或尝试迁移数据时出现的问题。请在评论部分留下您对 PocketBase 的看法。我想了解您使用 PocketBase 的经验和想法。我希望您发现本文非常有用,我们将在下一篇中见到您。

标签: #basejs