Skip to main content

开始使用 Sapper

¥Getting Started with Sapper

🧹 删除了集成指南

Strapi 文档团队专注于改进 Strapi 5 核心体验的文档。我们将在未来 6 个月内发布许多更改,请密切关注👀。

¥The Strapi Documentation team focuses on improving the documentation for Strapi 5's core experience. We will release many changes in the next 6 months, so please keep an eye out 👀.

因此,当前页面现在仅处于维护模式,可能未完全与 Strapi 5 保持同步,并且很快将从 docs.strapi.io 中删除并移至 Strapi 的 集成页面

¥As a result, the present page is now in maintenance mode only, might not be fully up-to-date with Strapi 5, and will soon be removed from docs.strapi.io and moved to Strapi's integrations page.

同时,如果你想帮助我们改进此页面,请随时 contribute 到文档的 GitHub 存储库。

¥In the meantime, if you want to help us improve this page, please feel free to contribute to the documentation's GitHub repository.

本集成指南遵循 快速入门指南。你应该能够通过浏览 URL[http://localhost:1337/api/restaurants](http://localhost:1337/api/restaurants) 使用该 API。

¥This integration guide follows the Quick Start Guide. You should be able to consume the API by browsing the URL http://localhost:1337/api/restaurants.

如果你尚未阅读快速入门指南,则使用 Sapper 请求 Strapi API 的方式将保持不变,只是你不获取相同的内容。

¥If you haven't gone through the Quick Start Guide, the way you request a Strapi API with Sapper remains the same except that you do not fetch the same content.

创建一个 Sapper 应用

¥Create a Sapper app

首先,通过在命令行接口 (CLI) 中运行 npm install -g degit 来安装 Degit。

¥First, install Degit by running npm install -g degit in your command-line interface (CLI).

“Degit 制作 Git 存储库的副本并获取存储库中的最新提交。这是比使用 git clone 更有效的方法,因为我们不会下载整个 Git 历史记录。”

¥“Degit makes copies of Git repositories and fetches the latest commit in the repository. This is a more efficient approach than using git clone, because we’re not downloading the entire Git history.”

使用 webpack 创建一个基本的 Sapper 应用:

¥Create a basic Sapper application using webpack:

npx degit "sveltejs/sapper-template#webpack" sapper-app

使用 HTTP 客户端

¥Use an HTTP client

许多 HTTP 客户端都可用,但在本文档中我们将使用 Axios拿来

¥Many HTTP clients are available but in this documentation we'll use Axios and Fetch.

yarn add axios

GET 请求你的集合类型

¥GET Request your collection type

restaurant 集合类型执行 GET 请求以获取所有餐厅。

¥Execute a GET request on the restaurant collection type in order to fetch all your restaurants.

确保你激活了 restaurant 集合类型的 find 权限

¥Be sure that you activated the find permission for the restaurant collection type

Example GET request with axios
import axios from 'axios';

axios.get('http://localhost:1337/api/restaurants').then(response => {
console.log(response);
});
Example response
[
{
"id": 1,
"name": "Biscotte Restaurant",
"description": "Welcome to Biscotte restaurant! Restaurant Biscotte offers a cuisine based on fresh, quality products, often local, organic when possible, and always produced by passionate producers.",
"created_by": {
"id": 1,
"firstname": "Paul",
"lastname": "Bocuse",
"username": null
},
"updated_by": {
"id": 1,
"firstname": "Paul",
"lastname": "Bocuse",
"username": null
},
"created_at": "2020-07-31T11:37:16.964Z",
"updated_at": "2020-07-31T11:37:16.975Z",
"categories": [
{
"id": 1,
"name": "French Food",
"created_by": 1,
"updated_by": 1,
"created_at": "2020-07-31T11:36:23.164Z",
"updated_at": "2020-07-31T11:36:23.172Z"
}
]
}
]

示例

¥Example

./src/routes/index.svelte

<script>
import { onMount } from 'svelte';
import axios from 'axios'

let restaurants = [];
let error = null

onMount(async () => {
try {
const res = await axios.get('http://localhost:1337/api/restaurants');
restaurants = res.data
} catch (e) {
error = e
}
});

</script>

{#if error !== null}
{error}
{:else}
<ul>
{#each restaurants as restaurant}
<li>
{restaurant.name}
</li>
{/each}
</ul>
{/if}

POST 请求你的集合类型

¥POST Request your collection type

restaurant 集合类型执行 POST 请求以创建餐厅。

¥Execute a POST request on the restaurant collection type in order to create a restaurant.

确保你激活了 restaurant 集合类型的 create 权限和 category 集合类型的 find 权限。

¥Be sure that you activated the create permission for the restaurant collection type and the find permission fot the category Collection type.

在此示例中,已创建 japanese 类别,其 ID 为:3.

¥In this example a japanese category has been created which has the id: 3.

Example POST request with axios
import axios from 'axios';

axios
.post('http://localhost:1337/api/restaurants', {
name: 'Dolemon Sushi',
description: 'Unmissable Japanese Sushi restaurant. The cheese and salmon makis are delicious',
categories: [3],
})
.then(response => {
console.log(response);
});
Example response
{
"id": 2,
"name": "Dolemon Sushi",
"description": "Unmissable Japanese Sushi restaurant. The cheese and salmon makis are delicious",
"created_by": null,
"updated_by": null,
"created_at": "2020-08-04T09:57:11.669Z",
"updated_at": "2020-08-04T09:57:11.669Z",
"categories": [
{
"id": 3,
"name": "Japanese",
"created_by": 1,
"updated_by": 1,
"created_at": "2020-07-31T11:36:23.164Z",
"updated_at": "2020-07-31T11:36:23.172Z"
}
]
}

示例

¥Example

./src/routes/index.svelte

<script>
import { onMount } from 'svelte';
import axios from 'axios'

let allCategories = [];
let restaurantName = "";
let restaurantDescription = "";
let restaurantCategories = [];
let error = null;

async function handleSubmit() {
try {
const response = await axios.post('http://localhost:1337/api/restaurants', {
name: restaurantName,
description: restaurantDescription,
categories: restaurantCategories
});
console.log(response);
} catch(e) {
error = e
}
}

onMount(async () => {
try {
const response = await axios.get('http://localhost:1337/api/categories');
allCategories = response.data
} catch(e) {
error = e
}
});

</script>

{#if error !== null}
{error}
{:else}
<label for="name">Name</label>
<input id="name" bind:value={restaurantName} type="text" name="name">

<label for="description">Description</label>
<input id="description" bind:value={restaurantDescription} type="text" name="description">

<div>
<br />
Select categories
<br />
{#each allCategories as category}
<label>{ category.name }</label>
<input type="checkbox" bind:group={restaurantCategories} value={category} />
{/each}
</div>

<input type="submit" value="Submit" on:click={handleSubmit} />
{/if}

PUT 请求你的集合类型

¥PUT Request your collection type

restaurant 集合类型执行 PUT 请求以更新餐厅的类别。

¥Execute a PUT request on the restaurant collection type in order to update the category of a restaurant.

确保你激活了 restaurant 集合类型的 put 权限。

¥Be sure that you activated the put permission for the restaurant collection type.

Example PUT request with axios
import axios from 'axios';

axios
.put('http://localhost:1337/api/restaurants/2', {
categories: [2],
})
.then(response => {
console.log(response);
});
Example response
{
"id": 2,
"name": "Dolemon Sushi",
"description": "Unmissable Japanese Sushi restaurant. The cheese and salmon makis are delicious",
"created_by": null,
"updated_by": null,
"created_at": "2020-08-04T10:21:30.219Z",
"updated_at": "2020-08-04T10:21:30.219Z",
"categories": [
{
"id": 2,
"name": "Brunch",
"created_by": 1,
"updated_by": 1,
"created_at": "2020-08-04T10:24:26.901Z",
"updated_at": "2020-08-04T10:24:26.911Z"
}
]
}