Quickstarters
Как создать фронтенд на Solid.js и подключить его к бэкенду
34 мин
в этом руководстве вы создадите приложение список дел, используя solid js, и подключите его к надежному бэкенду на базе back4app этот учебник разработан как идеальная отправная точка, поскольку охватывает основные операции crud (создание, чтение, обновление, удаление) и проводит вас через проектирование четкого и функционального пользовательского интерфейса к концу вы получите полностью работающее приложение, которое демонстрирует, как интегрировать управляемый бэкенд сервис, используя solid js для отзывчивого фронтенда разработка полнофункционального приложения может быть сложной задачей из за сложности настройки бэкенда, управления базой данных, обработки аутентификации и развертывания инфраструктуры чтобы упростить этот процесс, мы используем back4app, который предлагает масштабируемое решение бэкенда как услуги (baas) , позволяя вам сосредоточиться на создании вашего фронтенда, в то время как он управляет хостингом, базами данных и api back4app предоставляет комплексные услуги бэкенда, включая готовую к использованию базу данных, аутентификацию, cloud code для серверной логики и sdk для плавной интеграции он также поддерживает контейнеризированные развертывания, что делает его гибким выбором для хостинга полнофункциональных приложений с этими инструментами вы можете быстро разрабатывать и развертывать приложения, не беспокоясь о техническом обслуживании серверов ключевые выводы следуя этому руководству, вы научитесь инициализировать современный проект solid js с использованием vite бесшовно интегрировать серверную службу для обработки данных вашего приложения реализовать основные операции crud для динамичного и интерактивного пользовательского интерфейса развернуть полностью функциональное список дел приложение, используя контейнеризованные рабочие процессы на back4app предварительные требования убедитесь, что у вас есть эти инструменты и навыки, прежде чем начать node js и npm установите node js (рекомендуется lts) с nodejs org https //nodejs org/ и проверьте, запустив node v и npm v в вашем терминале базовые знания solid js знание компонентов, реактивных сигналов (используя createsignal ), и синтаксиса jsx обязательно если вы новичок в solid js, рассмотрите возможность предварительного изучения его основ аккаунт на back4app зарегистрируйтесь на back4app https //www back4app com/ для настройки и управления вашими серверными службами с этими предварительными требованиями вы готовы настроить свой проект и начать разработку настройка проекта начните с настройки вашей локальной среды разработки и инициализации вашего проекта solid js с использованием vite для быстрого процесса разработки убедитесь, что node js (lts версия) установлен на вашем компьютере если необходимо, загрузите и установите его с nodejs org https //nodejs org/ подтвердите установку node v npm v инициализируйте ваш проект solid js с использованием vite выполните следующую команду в вашем терминале (замените todo app на желаемое имя проекта) npm create vite\@latest todo app template solid перейдите в директорию вашего проекта cd todo app установите все необходимые зависимости npm install запустите сервер разработки, чтобы подтвердить вашу настройку npm run dev ваше приложение solid js теперь должно работать локально откройте отображаемый url в вашем браузере, чтобы проверить далее вы настроите свой бэкенд на back4app для управления хранением данных и взаимодействиями с api создание бэкенда todo back4app предлагает полностью управляемый бэкенд сервис на базе parse , предоставляя nosql базу данных, аутентификацию, cloud code и автоматически сгенерированные api прямо из коробки этот раздел проведет вас через создание модели данных задачи для хранения ваших элементов списка дел и связывания его с вашим фронтендом на solid js настройка вашего серверного приложения войдите в вашу панель управления back4app https //www back4app com/ и нажмите на "создать новое приложение " назовите ваше приложение (например, todosolidapp ) и выберите nodejs/parse в качестве типа сервера после создания приложения перейдите в "база данных" > "обозреватель" нажмите "создать класс" и выберите "пользовательский" назовите класс задача и установите разрешения на уровне класса для разрешения публичного чтения и записи (вы можете ужесточить эти настройки позже) в классе задача добавьте следующие поля название (строка) – название задачи описание (строка) – подробности о задаче завершено (булевый) – статус, указывающий, завершена ли задача срок (дата) – срок выполнения задачи нажмите "сохранить" для завершения вашей схемы интеграция back4app с solid js интегрируйте back4app в ваш проект solid js, используя parse javascript sdk для связи с вашим бэкендом установите sdk через npm npm install parse настройте sdk, инициализировав его с вашим application id и javascript key получите их на вашей панели управления back4app в разделе app settings > security & keys в вашем src/index jsx (или эквивалентном файле входа), импортируйте и настройте parse следующим образом import { render } from "solid js/web"; import ' /index css' import app from " /app"; 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; render(() => \<app />, document getelementbyid("root")); с настроенным бэкендом вы готовы создать интерфейс to do list в solid js и реализовать операции crud разработка фронтенда с solid js теперь, когда ваш бэкенд подключен, создайте пользовательский интерфейс для вашего приложения to do list, используя solid js вы создадите компоненты для добавления, отображения, обновления и удаления задач, управляя состоянием с помощью реактивных сигналов организация ваших компонентов ваше приложение будет состоять из этих ключевых компонентов taskform jsx – управляет добавлением новых задач tasklist jsx – отображает все задачи и предлагает управление для их завершения или удаления taskitem jsx – представляет отдельную задачу с действиями для отметки как завершенной или удаления создайте components папку внутри src и добавьте эти файлы mkdir src/components touch src/components/taskform jsx src/components/tasklist jsx src/components/taskitem jsx управление состоянием с solid js используйте createsignal и createeffect solid js для управления состоянием и побочными эффектами начните с настройки состояния в app jsx import { createsignal, onmount } from "solid js"; import taskform from " /components/taskform"; import tasklist from " /components/tasklist"; import parse from "parse/dist/parse min js"; function app() { 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 ( \<div class="container"> \<h1>to do list\</h1> \<taskform fetchtasks={fetchtasks} /> \<tasklist tasks={tasks()} fetchtasks={fetchtasks} /> \</div> ); } export default app; создание компонента формы задачи в taskform jsx , создайте управляемую форму для добавления задач управляйте значениями ввода с помощью createsignal и отправляйте данные в back4app import { createsignal } from "solid js"; import parse from "parse/dist/parse min js"; function taskform(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(); props fetchtasks(); 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> ); } export default taskform; отображение списка задач в tasklist jsx , отобразите список задач, используя компонент taskitem для каждой записи import taskitem from " /taskitem"; function tasklist(props) { return ( \<div> {props tasks length === 0 ? ( \<p>no tasks available\</p> ) ( props tasks map(task => ( \<taskitem key={task id} task={task} fetchtasks={props fetchtasks} /> )) )} \</div> ); } export default tasklist; создание компонента элемента задачи в taskitem jsx , настройте действия для пометки задачи как завершенной или удаления её import parse from "parse/dist/parse min js"; function taskitem(props) { const handlecomplete = async () => { try { const query = new parse query("task"); const tasktoupdate = await query get(props task id); tasktoupdate set("completed", !props task completed); await tasktoupdate save(); props fetchtasks(); } catch (error) { console error("error updating task ", error); } }; const handledelete = async () => { try { const query = new parse query("task"); const tasktodelete = await query get(props task id); await tasktodelete destroy(); props fetchtasks(); } catch (error) { console error("error deleting task ", error); } }; return ( \<div class={`task item ${props task completed ? "completed" ""}`}> \<h3>{props task title}\</h3> \<p>{props task description}\</p> \<button onclick={handlecomplete}> {props task completed ? "undo" "complete"} \</button> \<button onclick={handledelete}>delete\</button> \</div> ); } export default taskitem; стилизация вашего приложения добавьте следующие стили в файл index css в папке src / center the content and add spacing / container { max width 600px; margin 40px auto; padding 0 20px; text align center; font family sans serif; } container 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; } container p { font size 1rem; } 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; } } импортируйте css файл в ваш src/index jsx import " /index css"; завершение пользовательского интерфейса ваше приложение to do list на solid js теперь имеет динамичный интерфейс, интегрированный с back4app и с пользовательским стилем приложение позволяет вам добавлять, отображать, обновлять и удалять задачи, поддерживая эффективное взаимодействие между фронтендом и бэкендом далее вы развернете ваше приложение solid js, используя платформу веб развертывания back4app развертывание фронтенда на платформе веб развертывания back4app платформа веб развертывания back4app предлагает полностью управляемую, контейнеризованную среду для развертывания ваших приложений с помощью развертываний на основе docker вы можете упаковать ваш фронтенд на solid js и развернуть его без усилий настройка vite для продакшн приложения solid js, созданные с помощью vite, по умолчанию работают в режиме разработки для продакшна создайте статическую версию и обслуживайте её с помощью легковесного веб сервера, такого как nginx обновите ваш vite config js чтобы установить правильный базовый путь import { defineconfig } from 'vite'; import solidplugin from 'vite plugin solid'; export default defineconfig({ plugins \[solidplugin()], base ' /', // ensures correct asset paths in containerized environments }); сгенерируйте файлы, готовые к продакшену npm run build создание dockerfile для вашего приложения создайте dockerfile в корне проекта, чтобы определить, как ваше приложение будет контейнеризовано # use an official lightweight node js image to build the app from node 18 alpine as build workdir /app copy package json package lock json / run npm install copy run npm run build \# use nginx to serve the static files from nginx\ alpine \# copy custom nginx config for spa routing copy nginx conf /etc/nginx/conf d/default conf \# copy built app from build stage copy from=build /app/dist /usr/share/nginx/html expose 80 cmd \["nginx", " g", "daemon off;"] после создания вашего dockerfile настройте nginx для правильной маршрутизации запросов к файлу root index html вашего приложения solid js, когда вы пытаетесь получить доступ к маршрутам напрямую для этого создайте nginx conf файл в корневом каталоге вашего проекта и вставьте приведенный ниже код server { listen 80; server name localhost; root /usr/share/nginx/html; index index html; \# gzip settings for better performance gzip on; gzip vary on; gzip min length 10240; gzip proxied expired no cache no store private auth; gzip types text/plain text/css text/xml text/javascript application/x javascript application/xml application/javascript; gzip disable "msie \[1 6]\\ "; \# handle static file requests location \\ (?\ jpg|jpeg|gif|png|ico|svg|woff2|woff|eot|ttf|css|js)$ { expires 30d; add header cache control "public, max age=2592000"; try files $uri =404; } \# redirect all requests to index html for spa routing location / { try files $uri $uri/ /index html; } \# error pages error page 404 /index html; error page 500 502 503 504 /50x html; location = /50x html { root /usr/share/nginx/html; } } тестирование контейнера локально перед развертыванием соберите и протестируйте ваш docker контейнер docker build t todo solid frontend запустите контейнер docker run p 8080 80 todo solid frontend посетите http //localhost 8080 в вашем браузере, чтобы подтвердить, что ваше приложение работает правильно публикация на github и развертывание через back4app отправьте ваш проект на github 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 войдите в back4app web deployment https //www back4app com/containers нажмите "создать новое приложение" , укажите имя и выберите github repository авторизуйте back4app для доступа к вашему репозиторию и выберите todo solid репозиторий выберите dockerfile deployment и подтвердите настройки сборки нажмите "развернуть" , чтобы начать процесс сборки мониторинг и управление развертываниями после развертывания используйте панель управления back4app для просмотр логов для отладки мониторинг производительности контейнера и использования ресурсов запуск повторных развертываний с новыми коммитами настройка пользовательских доменов, если это необходимо тестирование и отладка вашего приложения после развертывания тщательно протестируйте ваше приложение solid js проверьте подключение к api откройте консоль разработчика браузера (f12 → сеть), чтобы проверить вызовы api во время выполнения задач добавление и получение задач используйте интерфейс для добавления задач, затем обновите и подтвердите сохранение данных в браузере базы данных back4app операции crud проверьте завершение задач и удаление, убедившись, что обновления отражаются на сервере обработка крайних случаев проверьте вводимые данные формы и смоделируйте более медленные условия сети с помощью инструментов разработчика браузера если возникнут проблемы, обратитесь к журналам back4app или проверьте конфигурацию вашего api лучшие практики использования сервисов back4app улучшите производительность и безопасность вашего приложения, следуя оптимизация вызовов api используйте пакетные запросы для нескольких операций и выбирайте только необходимые поля в запросах защита переменных окружения храните конфиденциальные учетные данные в переменных окружения с vite создайте файл env vite parse app id=your app id vite parse js key=your js key реализация автоматического масштабирования включите автоматическое масштабирование в развертывании back4app для сценариев с высоким трафиком усиление безопасности используйте разрешения на уровне класса (clp), чтобы ограничить изменения данных и настраивайте acl по мере необходимости использование облачного кода перенесите сложную логику в облачный код для повышения производительности и уменьшения воздействия api заключение теперь вы создали полнофункциональное приложение to do list, используя solid js для фронтенда и надежные бэкенд сервисы back4app этот учебник охватывает путь от инициализации проекта solid js и интеграции parse sdk до развертывания вашего приложения через контейнеризованные рабочие процессы на back4app по мере продвижения рассмотрите возможность добавления таких функций, как расширенная аутентификация пользователей, обновления в реальном времени и интеграции с третьими сторонами для дальнейшего улучшения вашего приложения для получения дополнительной информации и поддержки изучите документацию back4app https //www back4app com/docs