---
title: Database Operations
slug: docs-ch/javascript/serverless-database
description: Learn how to perform CRUD operations using Parse in JS, with detailed code examples and testing guidelines.
image: https://www.back4app.com/images/logo-social.png
createdAt: 2024-03-04T18:52:57.085Z
---

# 执行无服务器数据库操作

## 介绍

本节解释如何通过 Back4app 在 JavaScript 环境中实现 **CRUD（创建、读取、更新和删除）操作**。
它还提供代码片段和一个在线环境，以便您执行和测试代码，而无需本地设置。

:::hint{type="success"}
有关 Parse SDK 的更多信息，请访问 [Parse JavaScript SDK API 参考](https://parseplatform.org/Parse-SDK-JS/api/4.3.1/) 和 [Parse JavaScript SDK 开源文档](https://docs.parseplatform.org/js/guide/).
:::

## 先决条件

:::hint{type="info"}
除了具备基本的 JavaScript 知识外，没有其他额外要求。
**可选：** 要使用您自己的应用程序完成本教程，您需要：

- 在 Back4app 上创建并配置的 JavaScript 应用程序。
  - **注意：请遵循 [JavaScript 安装 Parse SDK 教程](https://www.back4app.com/docs/javascript/parse-javascript-sdk) 以了解如何操作。**
:::

## 1 - 设置环境

本指南使用 [JSbin](https://jsbin.com/) 平台作为代码编辑器。
使用起来非常简单，您只需打开其主页并点击 <font color="#2166ae">`HTML`</font>, <font color="#2166ae">`JavaScript`</font> 和 <font color="#2166ae">`控制台`</font> 按钮:

![](https://api.archbee.com/api/optimize/yD3zCY-NNBBIfd0uqcfR5/F1dr16wL8lXj-IFiHtm5i_image.png)

开始编码的第一步是包含 Parse API 并添加您的应用程序密钥。

在本教程中，创建了一个公共 Back4app 应用程序，以便您可以在数据库中检查您的更改，而无需创建自己的应用程序。

:::hint{type="info"}
**可选:&#x20;**&#x8981;检查此示例的 Parse 数据库，您需要创建自己的应用程序并访问 <font color="#2166ae">`Parse Dashboard`</font> 选项。
:::

要在您的应用程序中包含 Parse API，请在 <font color="#2166ae">`HTML`</font> 的头标签中添加以下代码行:

```html
<script type="text/javascript" src="https://unpkg.com/parse/dist/parse.min.js"></script>
```

然后在 <font color="#2166ae">`JavaScript`</font> 文件的开头添加您的凭据。默认密钥与我们的公共应用程序相关。

```javascript
//Paste your Application Key and JavaScript Key, respectively
Parse.initialize("Your-Application-Id", "Your-Javascript-Key");
Parse.serverURL = "https://parseapi.back4app.com/";
```

在本教程中，我们将基于一个具有名称和年龄字段的宠物类构建 **CRUD 操作&#x20;**，其中名称是字符串，年龄是数字。因此，代码应该首先创建一个宠物类的子类，以便稍后在我们的函数中使用，如下所示：

```javascript
var Pet = Parse.Object.extend("Pet");
```

所有基本操作都需要用户说明所需宠物的名称。这样，创建一个全局变量“textName”。创建一个“textAge”变量也是个好主意，它将在创建和更新方法中使用。



```javascript
var textName = "myName";
var textAge = 10;
```

## 2 - 创建

该 <font color="#2166ae">`创建`</font> 函数将使用您在“textName”和“textAge”变量中提供的名称和年龄创建一个新的宠物。

要构建该函数，只需按照以下步骤操作：

1. 使用命令创建 Parse 的宠物类的新实例
2. 使用 <font color="#2166ae">`设置`</font> 函数为该对象设置参数。
3. 调用 <font color="#2166ae">`保存`</font> 函数，这将有效地将宠物注册到您的数据库中，在<font color="#2166ae">`Parse Dashboard`</font>。

:::hint{type="info"}
您可以打开 [Back4app JavaScript 创建函数](https://jsbin.com/bozuguh/edit?html,js,console)以查看已实现的代码。
:::

该 <font color="#2166ae">`创建`</font> 函数的代码如下所示：

:::CodeblockTabs
create.js

```javascript
create();

function create() {
    mypet = new Pet();
    mypet.set("name", textName);
    mypet.set("agePet", textAge);

    mypet.save().then(function(pet){
         console.log('Pet created successful with name: ' + pet.get("name") + ' and age: ' + pet.get("agePet"));
    }).catch(function(error){
         console.log('Error: ' + error.message);
    });
}
```
:::

:::hint{type="info"}
要测试它，请将此代码片段粘贴到 [JSbin](https://jsbin.com/?html,js,output), 点击控制台部分的 <font color="#2166ae">`运行`</font> 按钮并等待输出。
它应该打印出宠物已成功创建的信息。
要确认新对象是否在数据库中，您可以访问 <font color="#2166ae">`Parse Dashboard`</font>，或者您可以编写 <font color="#2166ae">`读取`</font> 函数。
:::

## 3 - 读取

&#x20;<font color="#2166ae">`读取`</font> 函数负责查询数据库并返回与您的搜索条件匹配的对象。它也可以用来检查对象的存在。
以下是构建您自己的 <font color="#2166ae">`读取`</font> 函数的逐步指南：

1. 创建 Parse 的 Query 类的实例。
2. 向查询添加约束以限制搜索。更多约束选项可以在 [Parse 查询文档。](http://docs.parseplatform.org/js/guide/#query-constraints)
3. 执行查询的搜索方法。本教程将使用 <font color="#2166ae">`query.first`</font> 来获取仅与您的条件匹配的第一个元素。
4. 如果操作成功，将返回一个宠物对象。如果未找到对象，返回的对象将具有 **未定义** 的值。

:::hint{type="info"}
您可以打开 [Back4app JavaScript 读取函数](https://jsbin.com/roziroy/edit?html,js,output) 来查看已经实现的代码。
:::

以下是 <font color="#2166ae">`读取`</font> 函数的代码：

:::CodeblockTabs
read.js

```javascript
read();

function read() {
    query = new Parse.Query(Pet);
    query.equalTo("name", textName);
    query.first().then(function(pet){
        if(pet){
           console.log('Pet found successful with name: ' + pet.get("name") + ' and age: ' + pet.get("agePet"));
        } else {
           console.log("Nothing found, please try again");
        }
    }).catch(function(error){
        console.log("Error: " + error.code + " " + error.message);       
    });
}
```
:::

:::hint{type="info"}
要测试 <font color="#2166ae">`读取`</font> 函数，将代码片段粘贴到您的 JSBin JavaScript 文件中。当代码运行时，它将打印找到的宠物的年龄（如果找到的话），否则将打印没有找到宠物的信息。
:::

:::hint{type="danger"}
如果在测试时打印的年龄与您的对象的年龄不符，这意味着有&#x20;更多同名的对象，但您的查询只返回其中一个。因此，为了真正测试 <font color="#2166ae">`读取`</font> 函数，请创建一个其他名称的对象，一个尚未被创建的对象，然后运行该函数，它将正确打印该对象的年龄。
:::

## 4 - 更新

对于 <font color="#2166ae">`更新`</font> 函数，宠物作为参数传递，函数将其年龄更改为您在 “textAge” 变量中提供的年龄。为了找到将被传递的宠物，我们使用我们 <font color="#2166ae">`读取`</font> 函数的修改版本。

以下是制作您自己的 <font color="#2166ae">`更新`</font> 函数的步骤：

1. 编写一个名为 <font color="#2166ae">`readThenUpdate`</font> 的修改版读取函数，当成功找到宠物时调用 <font color="#2166ae">`更新`</font> 函数。
2. 在 <font color="#2166ae">`更新`</font> 函数中，使用 <font color="#2166ae">`设置`</font> 函数来修改您宠物的参数。
3. 调用 <font color="#2166ae">`保存`</font> 函数以将此宠物的更改推送到数据库。

:::hint{type="info"}
您可以打开 [Back4app JavaScript 更新函数](https://jsbin.com/jidinim/edit?html,js,output) 来查看已经实现的代码。
:::

这是 <font color="#2166ae">`readThenUpdate`</font> 函数和 <font color="#2166ae">`update`</font> 函数的代码:

:::CodeblockTabs
update.js

```javascript
readThenUpdate();

function readThenUpdate() {
    query = new Parse.Query(Pet);
    query.equalTo("name", textName);
    query.first().then(function (pet) {
      if (pet) {
        console.log('Pet found with name: ' + pet.get("name") + ' and age: ' + pet.get("agePet"));
        update(pet);
      } else {
        console.log("Nothing found, please try again");
      }
    }).catch(function (error) {
      console.log("Error: " + error.code + " " + error.message);
    });
}

function update(foundPet) {
    textName = "myNameUpdated";
    textAge = 20;
    console.log(textAge);
    foundPet.set('name', textName);
    foundPet.set('agePet', textAge);

    foundPet.save().then(function (pet) {
      console.log('Pet updated! Name: ' + pet.get("name") + ' and new age: ' + pet.get("agePet"));
    }).catch(function(error) {
      console.log('Error: ' + error.message);
    });
}
```
:::

:::hint{type="info"}
要确认 <font color="#2166ae">`update`</font> 函数是否正常工作，请将上面的代码粘贴到 JSBin 页面中的 JavaScript 文件中。
使用一个不常见的名称来创建你的对象，以避免与其他用户冲突，然后按照以下步骤操作：

1\. 创建一个你想要的名称的对象。
2\. 检查对象是否已使用你的 <font color="#2166ae">`read`</font> 函数创建。
3\. 调用你在本主题中创建的 <font color="#2166ae">`readThenUpdate`</font> 函数，使用与原始不同的年龄。
4\. 通过再次调用你的 <font color="#2166ae">`read`</font> 函数检查宠物的年龄是否已更改。
:::

## 5 - 删除

该 <font color="#2166ae">`删除`</font> 函数会删除由 <font color="#2166ae">`读取`</font> 函数接收到的宠物。它是一个不可逆的操作，这意味着在使用时要小心，特别是因为你的 <font color="#2166ae">`读取`</font> 函数可能会返回比你实际想要删除的更多对象。因此，建议一次只删除一个对象。编写你自己的 <font color="#2166ae">`删除`</font> 函数的步骤如下:

1. 在你的 “读取” 函数成功结束时 (<font color="#2166ae">`readThenDelete`</font> 在这个例子中)，调用 <font color="#2166ae">`删除`</font> 函数.
2. 在 <font color="#2166ae">`deletePet`</font> 函数中，调用接收到的对象 “foundPet” 的销毁方法.

:::hint{type="info"}
你可以打开 [Back4app JavaScript 删除函数](https://jsbin.com/vubiqoq/edit?html,js,output) 来查看已经实现的代码.
:::

这是 <font color="#2166ae">`readThenDelete`</font> 函数和 <font color="#2166ae">`deletePet`</font> 函数的代码：

:::CodeblockTabs
delete.js

```javascript
readThenDelete();

function readThenDelete() {
    query = new Parse.Query(Pet);
    query.equalTo("name", textName);
    query.first().then(function (pet) {
        if (pet) {
            console.log('Pet found with name: ' + pet.get("name") + ' and age: ' + pet.get("agePet"));
            deletePet(pet);
        } else {
            console.log("Nothing found, please try again");
            return null;
        }
    }).catch(function (error) {
        console.log("Error: " + error.code + " " + error.message);
        return null;
    });
}

function deletePet(foundPet) {
    foundPet.destroy().then(function(response) {
      console.log('Pet '+ foundPet.get("name") + ' erased successfully');
    }).catch(function(response, error) {
      console.log('Error: '+ error.message);
    });
}
```
:::

:::hint{type="info"}
为了测试，建议创建一个不寻常名称的对象，就像其他函数一样，以避免与其他用户的对象冲突。
只需将代码片段粘贴到 JSBin 中，并使用您的对象名称和将要删除的对象运行代码。
然后，您可以调用您的 <font color="#2166ae">`read`</font> 函数以确认没有具有该名称的对象。
:::

:::hint{type="danger"}
如果读取返回一个对象，而它不应该，这可能意味着您有多个具有相同名称的对象，并且它返回了其中一个作为 <font color="#2166ae">`delete`</font> 函数只删除一个对象。
您可以通过访问您的 <font color="#2166ae">`Parse Dashboard`</font> 来检查您的对象。
:::

## 完成了！

到此为止，您已经学习了如何使用 JavaScript 进行基本的 CRUD 操作。
