Quickstarters
Как создать фронтенд на Astro и подключить его к бэкэнду?
34 мин
в этом учебном пособии вы создадите приложение список дел, используя astro, и подключите его к управляемой службе бэкенда на базе back4app этот гид предназначен для вас, если вы хотите освоить основные операции crud (создание, чтение, обновление, удаление), создавая современный статический интерфейс с динамическими данными с помощью astro к концу этого учебного пособия ваше приложение будет бесшовно взаимодействовать с бэкендом, который обрабатывает хранение данных, аутентификацию и многое другое разработка полнофункционального приложения может быть сложной из за настройки бэкенда и управления базами данных чтобы упростить ваш процесс, мы используем back4app— https //blog back4app com/backend as a service baas/ —чтобы вы могли сосредоточиться на создании быстрого и легковесного интерфейса astro back4app предоставляет полностью управляемую nosql базу данных, аутентификацию пользователей, cloud code для пользовательской логики и sdk для бесшовной интеграции это позволяет вам создавать и развертывать масштабируемые приложения без управления серверной инфраструктурой основные выводы следуя этому руководству, вы инициализируйте современный проект astro с vite интегрируйте серверную службу для управления данными вашего приложения реализуйте основные операции crud для https //todoapp ku5ofg8s b4a run/ разверните ваше полностью функциональное приложение, используя контейнеризованные рабочие процессы на back4app предварительные требования перед тем как начать, убедитесь, что у вас есть node js и npm установлены на вашем компьютере проверьте установки с помощью node v и npm v базовые знания astro , включая маршрутизацию на основе файлов и создание компонентов аккаунт back4app для управления вашими серверными службами зарегистрируйтесь на https //www back4app com/ если вы еще этого не сделали с этими предварительными требованиями вы готовы начать создание вашего проекта настройка проекта начните с настройки вашей локальной среды разработки и инициализации нового проекта astro убедитесь, что у вас установлен node js (lts версия) если нет, загрузите его с 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 следуйте этим шагам, чтобы настроить ваш бэкенд войдите в вашу 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 войдите в https //www back4app com/containers нажмите "создать новое приложение" , укажите имя вашего проекта и выберите ваш репозиторий github авторизуйте back4app и выберите развертывание dockerfile подтвердите настройки сборки и нажмите "развернуть" для начала развертывания мониторинг вашего развертывания после развертывания используйте панель управления back4app для просмотра логов для отладки мониторинга производительности контейнера и использования ресурсов запуска сборок при новых коммитах настройки пользовательских доменов, если это необходимо получите доступ к вашему живому приложению по адресу 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 и бэкенд сервисами смотрим в будущее, подумайте о таких улучшениях, как обновления в реальном времени, улучшенная аутентификация и интеграция с третьими сторонами для дальнейшего обучения посетите https //www back4app com/docs и изучите ресурсы сообщества

