Quickstarters
Как создать фронтенд на Astro и подключить его к бэкэнду?
34 мин
в этом учебном пособии вы создадите приложение список дел, используя astro, и подключите его к управляемой службе бэкенда на базе back4app этот гид предназначен для вас, если вы хотите освоить основные операции crud (создание, чтение, обновление, удаление), создавая современный статический интерфейс с динамическими данными с помощью astro к концу этого учебного пособия ваше приложение будет бесшовно взаимодействовать с бэкендом, который обрабатывает хранение данных, аутентификацию и многое другое разработка полнофункционального приложения может быть сложной из за настройки бэкенда и управления базами данных чтобы упростить ваш процесс, мы используем back4app— надежный бэкенд как услуга —чтобы вы могли сосредоточиться на создании быстрого и легковесного интерфейса astro back4app предоставляет полностью управляемую nosql базу данных, аутентификацию пользователей, cloud code для пользовательской логики и sdk для бесшовной интеграции это позволяет вам создавать и развертывать масштабируемые приложения без управления серверной инфраструктурой основные выводы следуя этому руководству, вы инициализируйте современный проект astro с vite интегрируйте серверную службу для управления данными вашего приложения реализуйте основные операции crud для динамического списка задач разверните ваше полностью функциональное приложение, используя контейнеризованные рабочие процессы на back4app предварительные требования перед тем как начать, убедитесь, что у вас есть node js и npm установлены на вашем компьютере проверьте установки с помощью node v и npm v базовые знания astro , включая маршрутизацию на основе файлов и создание компонентов аккаунт back4app для управления вашими серверными службами зарегистрируйтесь на back4app https //www back4app com/ если вы еще этого не сделали с этими предварительными требованиями вы готовы начать создание вашего проекта настройка проекта начните с настройки вашей локальной среды разработки и инициализации нового проекта astro убедитесь, что у вас установлен node js (lts версия) если нет, загрузите его с nodejs org https //nodejs org/ создайте ваш проект astro, выполнив npm create astro\@latest todo app перейдите в каталог вашего проекта cd todo app запустите сервер разработки, чтобы проверить настройку npm run dev ваше приложение astro теперь должно открываться в вашем браузере с вашим фронтендом готовым, продолжайте создавать ваш бэкенд на back4app создание бэкенда todo back4app предлагает полностью управляемый бэкенд сервис на базе parse , который включает в себя nosql базу данных, аутентификацию, cloud code и автоматически сгенерированные api следуйте этим шагам, чтобы настроить ваш бэкенд войдите в вашу панель управления back4app https //www back4app com/ и нажмите "создать новое приложение " назовите ваше приложение (например, todoapp ) и выберите nodejs/parse в качестве типа бэкенда перейдите в "база данных" > "обозреватель" , нажмите "создать класс" , и выберите "пользовательский" назовите класс task и установите его разрешения для публичного чтения и записи (вы можете уточнить их позже) в классе task добавьте следующие поля title (строка) – заголовок задачи description (строка) – подробности о задаче completed (булевый) – статус выполнения задачи duedate (дата) – срок выполнения задачи нажмите "сохранить" для создания схемы интеграция back4app с astro вы будете использовать parse javascript sdk для подключения вашего приложения astro к бэкенду back4app установите parse sdk npm install parse настройте sdk, создав специальный модуль например, создайте файл по адресу src/lib/parseclient js со следующим содержимым import parse from 'parse/dist/parse min js'; const parse app id = 'your application id'; const parse js key = 'your javascript key'; const parse server url = 'https //parseapi back4app com/'; parse initialize(parse app id, parse js key); parse serverurl = parse server url; export default parse; теперь вы можете импортировать этот модуль в ваши компоненты или страницы astro для взаимодействия с бэкендом разработка фронтенда ваше приложение astro будет состоять из компонентов и страниц для добавления, отображения, обновления и удаления задач используйте маршрутизацию на основе файлов и компоненты astro для создания динамического списка задач структурирование ваших компонентов чтобы создать ваш фронтенд, вы будете использовать solid js чтобы использовать solid js в astro, установите пакет solid js вот так npm install solid js создайте src/components папку для организации ваших ui компонентов mkdir src/components вы создадите следующие компоненты taskformsolid jsx – для добавления новых задач taskitemsolid jsx – для представления отдельных задач tasklistsolid jsx – для отображения списка задач todoapp jsx – для отображения полного приложения taskformsolid jsx этот компонент отображает форму, которая захватывает детали задачи и отправляет их в back4app // taskformsolid jsx import { createsignal } from 'solid js'; import parse from ' /lib/parseclient'; export default function taskformsolid(props) { const \[title, settitle] = createsignal(''); const \[description, setdescription] = createsignal(''); const handlesubmit = async (e) => { e preventdefault(); try { const task = parse object extend('task'); const task = new task(); task set('title', title()); task set('description', description()); task set('completed', false); await task save(); if (props refreshtasks) { props refreshtasks(); } settitle(''); setdescription(''); } catch (error) { console error('error adding task ', error); } }; return ( \<form onsubmit={handlesubmit}> \<input type="text" placeholder="task title" value={title()} oninput={(e) => settitle(e target value)} required /> \<input type="text" placeholder="description" value={description()} oninput={(e) => setdescription(e target value)} required /> \<button type="submit">add task\</button> \</form> ); } taskitemsolid jsx этот компонент представляет собой отдельную задачу, предоставляя кнопки для переключения статуса выполнения или удаления задачи // taskitemsolid jsx import { createsignal } from 'solid js'; import parse from ' /lib/parseclient'; export default function taskitemsolid(props) { const \[iscompleted, setiscompleted] = createsignal(props task completed); const togglecomplete = async () => { try { const query = new parse query('task'); const tasktoupdate = await query get(props task id); const newcompletedstate = !iscompleted(); tasktoupdate set('completed', newcompletedstate); await tasktoupdate save(); setiscompleted(newcompletedstate); if (props refreshtasks) { props refreshtasks(); } } catch (error) { console error('error updating task ', error); } }; const deletetask = async () => { try { const query = new parse query('task'); const tasktodelete = await query get(props task id); await tasktodelete destroy(); if (props refreshtasks) { props refreshtasks(); } } catch (error) { console error('error deleting task ', error); } }; return ( \<div class={`task item ${iscompleted() ? 'completed' ''}`}> \<div> \<h3>{props task title}\</h3> \<p>{props task description}\</p> \</div> \<div> \<button onclick={togglecomplete}> {iscompleted() ? 'undo' 'complete'} \</button> \<button onclick={deletetask}>delete\</button> \</div> \</div> ); } tasklistsolid jsx этот компонент отображает список задач, перебирая массив и рендеря каждый элемент taskitem // tasklistsolid jsx import { for, show } from 'solid js'; import taskitemsolid from ' /taskitemsolid'; export default function tasklistsolid(props) { return ( \<div class="task list"> \<show when={props tasks length > 0} fallback={\<p>no tasks available\</p>}> \<for each={props tasks}> {(task) => ( \<taskitemsolid task={task} refreshtasks={props refreshtasks} /> )} \</for> \</show> \</div> ); } todoapp jsx этот компонент импортирует и отображает другие компоненты он отображает все приложение // todoapp jsx import { createsignal, onmount, createeffect } from 'solid js'; import parse from ' /lib/parseclient'; import taskformsolid from ' /taskformsolid'; import tasklistsolid from ' /tasklistsolid'; export default function todoapp() { const \[tasks, settasks] = createsignal(\[]); const fetchtasks = async () => { try { const task = parse object extend('task'); const query = new parse query(task); const results = await query find(); settasks(results map(task => ({ id task id, task tojson() }))); } catch (error) { console error('error fetching tasks ', error); } }; onmount(() => { fetchtasks(); }); return ( <> \<taskformsolid refreshtasks={fetchtasks} /> \<tasklistsolid tasks={tasks()} refreshtasks={fetchtasks} /> \</> ); } интеграция страницы на вашей главной странице (например, src/pages/index astro , управляйте состоянием задач и интегрируйте ваши компоненты // index astro import todoapp from ' /components/todoapp'; import layout from ' /layouts/layout astro'; import parse from ' /lib/parseclient'; \ \<layout> \<div class="container"> \<h1>to do list\</h1> \<todoapp client\ load /> \</div> \</layout> стилизация приложения чтобы добавить глобальные базовые стили, добавьте приведенные ниже css стили в файл layouts astro в директории src/layouts container { max width 600px; margin 40px auto; padding 0 20px; text align center; font family sans serif; } h1 { margin bottom 20px; } form { display flex; flex direction column; align items center; gap 10px; margin bottom 20px; } form input\[type="text"] { width 80%; max width 400px; padding 8px; box sizing border box; font size 1rem; } form button { padding 8px 16px; cursor pointer; font size 1rem; border none; background color #eaeaea; transition background color 0 2s ease; } form button\ hover { background color #ccc; } task item { display flex; flex direction column; align items center; justify content center; gap 12px; border 1px solid #ccc; border radius 6px; padding 15px; margin 10px 0; background color #fafafa; text align center; transition background color 0 2s ease; } task item completed h3, task item completed p { text decoration line through; color #888; } task item h3 { margin 0; font size 1 1rem; } task item p { margin 0; font size 1rem; } task item button { padding 6px 12px; border none; background color #eaeaea; cursor pointer; font size 0 9rem; } task item button\ hover { background color #ccc; } @media (min width 600px) { task item { flex direction row; } } теперь добавьте атрибут is\ global в тег стиля \<!doctype html> \<html lang="en"> \<head> \<meta charset="utf 8" /> \<meta name="viewport" content="width=device width" /> \<link rel="icon" type="image/svg+xml" href="/favicon svg" /> \<meta name="generator" content={astro generator} /> \<title>astro basics\</title> \</head> \<body> \<slot /> \</body> \</html> \<style is\ global> / your styles / \</style> развертывание фронтенда на back4app web deployment back4app web deployment предоставляет контейнеризированную среду для размещения вашего приложения astro сгенерируйте производственную сборку npm run build создание dockerfile создайте dockerfile в корне вашего проекта со следующим содержимым # build stage from node 18 alpine as build workdir /app \# copy package files and install dependencies copy package json package lock json / run npm ci \# copy all files and build the application copy run npm run build \# production stage from node 18 alpine workdir /app \# set environment variables env node env=production env host=0 0 0 0 env port=3000 \# copy the build output from the build stage copy from=build /app/dist/ /dist/ \# install the static file server run npm install g serve \# expose the port expose 3000 \# start serving the static files from the "dist" folder cmd \["serve", " s", "dist", " l", "3000"] тестирование контейнера docker локально соберите свой образ docker docker build t todo frontend запустите контейнер docker run p 3000 3000 todo frontend откройте http //localhost 3000 в вашем браузере, чтобы убедиться, что ваше приложение astro обслуживается правильно развертывание на back4app инициализируйте репозиторий git, добавьте файлы вашего проекта и выполните коммит git init git add git commit m "initial commit for back4app deployment" git branch m main git remote add origin \<your github repository url> git push u origin main войдите в back4app web deployment https //www back4app com/containers нажмите "создать новое приложение" , укажите имя вашего проекта и выберите ваш репозиторий github авторизуйте back4app и выберите развертывание dockerfile подтвердите настройки сборки и нажмите "развернуть" для начала развертывания мониторинг вашего развертывания после развертывания используйте панель управления back4app для просмотра логов для отладки мониторинга производительности контейнера и использования ресурсов запуска сборок при новых коммитах настройки пользовательских доменов, если это необходимо получите доступ к вашему живому приложению по адресу https //todoapp ku5ofg8s b4a run/ https //todoapp ku5ofg8s b4a run/ https //todoapp ku5ofg8s b4a run/ тестирование и отладка после развертывания подтвердите, что ваш фронтенд astro правильно взаимодействует с бэкендом back4app проверка api используйте инструменты разработчика вашего браузера (f12 → сеть), чтобы проверить вызовы api операции с задачами добавляйте, завершайте и удаляйте задачи через интерфейс и проверяйте обновления в браузере базы данных back4app обработка ошибок проверяйте журналы консоли на наличие ошибок и тестируйте крайние случаи, такие как пустые отправки тестирование производительности симулируйте медленные сетевые условия с помощью инструментов браузера, чтобы оценить отзывчивость лучшие практики использования back4app с astro чтобы оптимизировать ваше приложение эффективные запросы используйте пакетные операции при обработке нескольких задач const tasks = \[task1, task2, task3]; parse object saveall(tasks); оптимизированные запросы извлекайте только необходимые поля query select('title', 'completed'); управление окружением храните чувствительные ключи в переменных окружения astro parse app id=your app id astro parse js key=your js key безопасность используйте acl для ограничения доступа task setacl(new parse acl(parse user current())); снятие нагрузки с бэкенда используйте cloud code для сложной логики, чтобы уменьшить воздействие api заключение теперь вы создали полнофункциональное приложение to do list, создав фронтенд на astro, интегрировав его с бэкендом back4app и развернув его с помощью контейнеризованных рабочих процессов этот учебник провел вас через каждый шаг — от локальной разработки до облачного развертывания — обеспечивая бесшовное взаимодействие между вашим интерфейсом astro и бэкенд сервисами смотрим в будущее, подумайте о таких улучшениях, как обновления в реальном времени, улучшенная аутентификация и интеграция с третьими сторонами для дальнейшего обучения посетите документация back4app https //www back4app com/docs и изучите ресурсы сообщества