ThinkTs
- Поддержка TypeORM, лучшего TypeScript ORM фреймворка, для лёгкого написания логики слоя DAO.
- Позволяет использовать статические типы, вывод типов и обеспечивает поддержку для разработки и обслуживания бэкенда.
- Модульная разработка делает приложение более легко поддающимся разделению на слои и предоставляет удобные механизмы управления модулями.
- Минимальное написание кода AOP (аспектно-ориентированное программирование), ориентированного на аспекты, но при этом легко реализующего функции журнала, перехватчика и фильтра.
- Быстрое, быстрое и мощное построение систем MVC, API, WebSocket и микросервисов.
- Конфигурация важнее кодирования, автоматическое выполнение операций добавления, удаления, изменения и разбиения на страницы, что упрощает создание системы разрешений.
- Классы сервисов могут реализовывать интерфейсы, что позволяет быстро находить каждый метод и легко поддерживать сложный и обширный код сервиса.
- Уровень поля RBAC (контроль доступа на основе ролей) в сочетании с подключаемыми промежуточными программами-декораторами предоставляет бесконечные возможности для сборки функций.
- Поддерживает serverless, после внедрения маршрутизатора в метод контроллера можно легко преобразовать веб-страницу в бэкенд или записать в файл.
- Можно использовать различные базы данных, поддерживаемые TypeORM, в настоящее время предоставляются MySQL и PostgreSQL.
- Добавлен демонстрационный пример использования socketIo, размещённый в каталоге example (по умолчанию версия для администратора, требуется Redis).
- Возможность использовать метод переопределения, чтобы не беспокоиться о дублировании маршрутов.
- Основан на магических функциях ES6 Generator, а также на полной асинхронности, что повышает эффективность и стабильность.
- Генерация файлов маршрутизации до /routes, что избавляет фронтенд от необходимости вручную писать маршруты axios, обеспечивая реальное использование.
ThinkTs дискуссионная зона
ThinkTs вдохновлён реализацией ThinkPHP+Nestjs+FastAPI и предназначен для удовлетворения потребностей менеджеров проектов. Его цель — достигать небольших целей (проектов) каждый день.
Бенчмарки
Использование ThinkTs позволяет сделать ваш контроллер похожим на:
@Class(["add","del","fix","info","page"])//or @Class("/admin",……)or @Class("admin",……)
class Admin extends Controller{
@Inject(Admin$) readonly a_:Admin$
@Inject(User$) readonly u_:User$
@Middle(W.Log,W.V_B("account|1#3~10","pwd#6~23|1"))
@app.post("register")
add(@B b,@R r:Response) {
r.status=202;//设置状态码
return this.u_.register(b.account,b.pwd)
}
}
Вот как можно отобразить шаблон EJS:
class View{
@Get() @Get("index.html")
index(ctx:Context){
html(ctx,{test:"test",author:"asciphx"}).next().value
}
@Get("login.html")
login(ctx:Context){
html(ctx,{test:"test",author:"Login"}).next().value
}
}
Ваш сервис может выглядеть так:
export default class User$ extends $ implements F{
constructor(
private u=Inject(User),private r=Inject(Role)
) {
super({
leftJoin:{e:"u.roles",a:'role'},
addSelect:['role.id','role.name'],
where: query => new Brackets(qb => {
if (query.account) qb.where('account like :v', { v: `%${query.account}%` })
if (query.id) qb.andWhere('u.id >:i', { i: query.id })
}),
orderBy: { "u.id": "desc" }
},"u")
}
}
Интерфейс может быть таким:
export default interface UserFace{
/** register one*/register(entity)
/** login one*/login(entity)
/** search all*/all()
}
Entity может быть написан в стиле TypeORM:
Cache используется следующим образом:
Cache
Особенности
- Классные декораторы по умолчанию равны "/"+имя класса сущности, но их также можно настроить.
- Автоматическое сканирование каталога сущностей и загрузка в кэш, что эквивалентно контейнеру, который предотвращает многократную инициализацию сущностей.
- Автоматическое сканирование каталога контроллеров и настройка маршрутов.
- Автоматическая генерация конфигурационных файлов маршрутов для удобства просмотра в каталоге routes, которые также можно удалить или изменить printRoute на false в app/config.ts для отключения.
- Скорость, близкая к Nest.js и Fastify, и удобство сопровождения, сравнимое с Java SpringBoot.
- Если не используется TypeORM, можно использовать Sequelize и переписать классы сущностей.
- Теперь добавлены базовые контроллеры, уровни сервисов и контроллеры-декораторы, которые автоматически выполняют операции добавления, удаления, изменения и разбивки на страницы.
- Добавление параметров-декораторов делает процесс более удобным и не влияет на скорость выполнения.
- Декораторы можно размещать горизонтально и складывать, причём порядок выполнения — справа налево.
- Магические функции генератора ES6 в сочетании с полным асинхронным программированием Node обеспечивают значительное повышение скорости.
Опубликовать ( 0 )