Роутинг

Роутинг базируется на нескольких простых принципах:

  • Запрос обрабатывается файлом, соответствующим пути, указанному в URL HTTP-запроса.
  • Один файл может обрабатывать несколько разных запросов, для выбора роута "внутри" файла-обработчика используется часть пути из URL после символа ~ (тильда).
  • Расширения файлов .ts и .tsx могут быть опущены в URL (т.е. вместо https://test.chatium.com/example.tsx можно сделать запрос к https://test.chatium.com/example).
  • Если путь в URL запроса соответствует директории, то система попробует найти индексный файл в этой директории ( index.html ,index.ts(x) или index) и выберет его обработчиком, если найдёт.

При разборе URL он делится на 3 части:

<https://accname.chatium.com>/folder1/about~part1

Домен - по нему определяется аккаунт и может быть сабдоменом chatium.com или произвольным доменом.

Путь - с учетом вложенности и директорий. Может содержать или не содержать расширение .tsx файла

part - необязательная часть, указывающая на метод внутри файла. Может быть добавлена к урлу через тильду. В нее можно закодировать переменные, такие как id продукта.

Если в аккаунте есть .ts или .tsx файл, путь до которого без учета расширения совпадает с Путь - то будет произведен поиск подходящего метода (по умолчанию ищется шаблон /) для обработки этого запроса, и запущен его код. Результат этого кода вернется пользователю.

/**
 * Файл /company/about.tsx в аккаунте test
 * Экран будет открываться по адресу
 * https://test.chatium.com/company/about
 */
app.screen('/', function() {
  return <screen title="О нас"/>
})

Файлы с расширениями .ts и .tsx регистрируют шаблоны адресов в своем коде с помощью методов:

  • app.screen - обрабатывает GET запросы, выдает Экран
  • app.get - обрабатывает GET запросы, выдает что угодно
  • app.apiCall - обрабатывает POST запросы - выдает Действие
  • app.post - обрабатывает POST запросы - выдает что угодно
  • app.html - обрабатывает и отображает HTML-страницу - выдает маршруты

У каждого из этих методов два аргумента:

  • pattern - шаблон пути, строка, которая будет сравниваться с part в адресе. Если part нет в адресе - будет использоваться со значением слеш /.
  • callback - функция-обработчик запроса.

Как работает шаблон пути

Все примеры даны для аккаунта с названием test, то есть адрес аккаунта test.chatium.com

Если в адресе не используется part, т.е. в урле нет ничего после знака тильды - будет использован корневой шаблон.

/**
 * Файл /catalog.tsx в аккаунте test
 * Экран будет открываться по адресу
 * https://test.chatium.com/catalog
 */
app.screen('/', function() {
  return <screen title="Каталог"/>
})

Можно задать статичный шаблон - тогда будет искаться прямое совпадение с part

/**
 * Пример: файл catalog.tsx в аккаунте test
 * Экран будет открываться по адресу
 * https://test.chatium.com/catalog~list
 */
app.screen('/list', function() {
  return <screen title="Список товаров"/>
})

В шаблоне пути могут использоваться динамические параметры

/**
 * Пример: файл catalog.tsx в аккаунте test
 * Экран будет открываться по адресам
 *
 * https://test.chatium.com/catalog~item/:id
 *
 * к примеру
 *
 * https://test.chatium.com/catalog~item/15
 * https://test.chatium.com/catalog~item/00001
 */
app.screen('/item/:id', function(ctx,req) {
  return (
    <screen title="Товар">
      <text>{req.params.id}</text>
    </screen>
  )
})

Callback-метод

Задача callback-метода - вернуть результат на запрос пользователя. Имеет 2 аргумента: ctx и req.

  • ctx - контекст, в котором исполняется текущий запрос. Содержит информацию о пользователе, аккаунте, окружении, роутере, устройстве и размере экрана с которого пользователь сделал запрос.

  • req - параметры запроса, к примеру queryString или params.

Вернуть такой метод должен то, что соответствует запросу. В случае запроса app.screen - это экран, в случае app.get это может быть любой объект, к примеру JSON.

❤️ Made with love on Chatium

ООО "Чатиум"

Информация о компании