Роутинг базируется на нескольких простых принципах:
~
(тильда)..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.