Рубрики
Без рубрики

Создайте приложение Phoenix LiveView, подобное JS с утверждением

Пошаговая инструкция по созданию приложений одобрения на основе веб -питания. Tagged с Apprun, JavaScript, Elixir, WebSockets.

Вступление

Когда я создавал Утвердить шаблон веб -окетов , Я думал, что я единственный сумасшедший человек, который подтолкнул и запустил расчет 1 + 1 на стороне сервера, пока не увидел это видео Анкет

Phoenix LiveViewis Решение на стороне сервера с использованием Эликсир язык программирования.

Мой Утверждение Решение WebSockets делится той же идеей с Phoenix liveview Анкет

Тем не менее, решение одобрения составляет 100% JavaScript. Для тех разработчиков JavaScript/TypeScript, которые не готовы выучить другой язык программирования, решение одобрения для вас.

Этот пост представляет собой пошаговую инструкцию о том, как создать приложение для одобрения на основе веб -питания.

Создайте проект

Чтобы начать, запустите следующие команды в терминале или командной оболочке.

npx degit apprunjs/apprun-websockets my-app
cd my-app
npm install
npm start

Вы увидите одно страничное приложение с помощью Bootstrap.

Структура проекта

Проект имеет типичную структуру проекта Express JS.

Фигура 1. Структура проекта

  • сервер В каталоге есть код на стороне сервера
  • Server/index.js это веб -сервер
  • SRC В каталоге есть код на стороне клиента
  • public В каталоге есть статические активы
  • public/index.html это веб -страница приложения по умолчанию

Проект также имеет несколько сценариев NPM.

  • NPM Start: Клиент : Скомпилируют и смотрят приложение на стороне клиента
  • NPM Start: Server : Запускает веб -сервер
  • npm start : Запускает клиент и сервер
  • NPM Run Build : Создайте приложение на стороне клиента для производства

Понять архитектуру

Сторона клиента

На Главная Страница спа, есть два счетчика. Один работает локально в браузере. Один работает на сервере.

import { app, Component } from 'apprun';

export default class HomeComponent extends Component {
  state = 0;
  view = state => {
    const add = (state, num) => state + num;
    return 

{state}

Run the counter locally

Run the counter on server through web sockets
}; update = { '@add': (_, state) => state } }

Все они используют модель программирования, управляемую событиями, для запуска обновления состояния и повторного жизненного цикла. Местный счетчик использует местную директиву событий. Счетчик сервера использует глобальное событие//ws:, что означает отправку его в север. Параметры события @Add, 1 или @Add -1.

main.tsx Имеет пять строк кода для отправки события на сервер через веб -сокет. Имя события @Add. Параметр события составляет 1 или -1.

const ws = new WebSocket(`ws://${location.host}`);
app.on('//ws:', (event, state, ...args) => {
  const msg = { event, state, args };
  ws.send(JSON.stringify(msg));
});

Серверная сторона

На стороне сервера index.js создает экспресс-сервер и прослушивает связь веб-сокетов. Когда он получает сообщения, он публикует сообщения с помощью утверждения.

const apprun = require('apprun').app;
require('./add');
const express = require('express');
const { createServer } = require('http');
const app = express();
const server = createServer(app);
const wss = new WebSocket.Server({ server });
wss.on('connection', function(ws) {
  ws.on('message', function (data) {
    try {
      const json = JSON.parse(data);
      apprun.run(json.event, json);
      ws.send(JSON.stringify(json));
    } catch (e) {
      console.error(e);
    }
  });
});

Да. Apprun работает на сервере, чтобы обеспечить программирование на стороне событий на стороне сервера.

add.js это модуль на стороне сервера, который обрабатывает событие @ADD. Он делает расчет для обновления Государство Анкет Тогда в index.js , он отправляет результаты обратно в веб -сокет в качестве события, используя то же имя события @Add.

const app = require('apprun').app;
app.on('@add', function (data) {
  data.state += data.args[0];
});

Вернуться к клиенту

main.tsx получает мероприятие из веб -сокета. Он просто должен публиковать так, как есть. Событие – это глобальное событие, которое имеет название @Add. Затем домашняя страница обрабатывает событие @ADD, чтобы рассчитать состояние на сервере.

ws.onmessage = function (msg) {
  const {event, state} = JSON.parse(msg.data);
  app.run(event, state);
}

Мы можем обобщить процесс на диаграмме ниже.

Фигура 2. События между клиентом и сервером

Следующие шаги

Вы можете использовать Утверждение – шаблон Websockets как начальная точка. В шаблоне есть все, что вам нужно для создания ваших приложений Phoenix LiveView.

Или вы можете скопировать около 20 строк кода JS из main.tsx и index.js в ваше существующее приложение, чтобы начать использовать мощность веб -питания. Например, Приложения, управляемые базой данных с использованием веб-питания Анкет

Живая демонстрация

Вывод

Поскольку мы используем JavaScript, наши приложения являются полнофункциональным спа-центром. Мы можем иметь Bootstrap, D3, ChartJS и даже плагины jQuery Анкет

Решение с одобрением веб -питания настолько просто, что оно даже не стоит быть пакетом NPM. Используйте Утверждение – шаблон Websockets или скопируйте около 20 строк кода в свою кодовую базу, у вас будут приложения Phoenix LiveView.

И последнее, что можно упомянуть, это то, что Phoenix Liveview выполняет рендеринг на стороне сервера (SSR), который также является тривиально с использованием утверждения Анкет Тем не менее, я предпочитаю веб -приложение Progress Web (PWA) по сравнению с SSR, потому что PWA предоставляет офлайн, значок домашнего экрана и многие другие функции. Есть также Шаблон утверждения для PWA Анкет

Оригинал: “https://dev.to/yysun/create-a-phoenix-liveview-like-app-in-js-with-apprun-dc8”