Роутинг базируется на нескольких простых принципах:
~ (тильда)..ts и .tsx могут быть опущены в URL (т.е. вместо https://test.chatium.com/example.tsx можно сделать запрос к https://test.chatium.com/example).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 регистрируют шаблоны адресов в своем коде с помощью методов:
У каждого из этих методов два аргумента:
/.Все примеры даны для аккаунта с названием 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-метода - вернуть результат на запрос пользователя. Имеет 2 аргумента: ctx и req.
ctx - контекст, в котором исполняется текущий запрос. Содержит информацию о пользователе, аккаунте, окружении, роутере, устройстве и размере экрана с которого пользователь сделал запрос.
req - параметры запроса, к примеру queryString или params.
Вернуть такой метод должен то, что соответствует запросу. В случае запроса app.screen - это экран, в случае app.get это может быть любой объект, к примеру JSON.