Для Nest, фреймворка на TypeScript, предназначенного для создания эффективных и расширяемых серверных приложений, вдохновлённого Angular, используется прогрессивный Node.js.
Описание
Nest framework TypeScript starter repository.
Установка зависимостей
Используйте пакетный менеджер pnpm для установки зависимостей. Также можно использовать npm или yarn.
$ pnpm install
Запуск приложения
# development — среда разработки
$ pnpm run start
# watch mode — режим отслеживания изменений файлов
$ pnpm run start:dev
# production mode — производственная среда
$ pnpm run start:prod
Что сделано
Используется cross-env NODE_ENV=development для настройки переменных для разных сред.
Может использоваться для загрузки различных конфигурационных файлов.
{ "start:dev": "cross-env NODE\_ENV=development nest start --watch" }
Конфигурация выполняется в файле src/config/configuration.ts. В зависимости от среды загружается файл .env в src/app.module.ts (возможно, вам больше нравится однофайловая конфигурация).
В проекте используется ConfigService для получения конфигурации.
// 注入
@Injectable()
export class HashingService {
constructor(private readonly configService: ConfigService<Configuration>) {}
async hash(value: string): Promise<string> {
return await bcrypt.hash(value, this.configService.get('saltRounds'));
}
}
// В main используется
const configService = app.get(ConfigService);
const PORT = configService.get<number>('port');
По умолчанию используется redis-кэширование, установите REDIS_DISABLE=true для использования memory.
src/modules/auth/auth.module.ts и src/modules/auth/auth.service.ts используют CacheService для доступа к кэшу.
Ограничение скорости API
То же самое, используются redis и memory-кэш.
@Module({
imports: [
ThrottlerModule.forRootAsync({
inject: [ConfigService],
useFactory: async (conifg: ConfigService<Configuration>) => ({
ttl: 60,
limit: conifg.get('rateLimitMax'),
storage: conifg.get('REDIS\_DISABLE')
? null
: new ThrottlerStorageRedisService(),
}),
}),
AuthModule,
],
providers: [
``` {
/** 节流器 */
provide: APP_GUARD,
useClass: ThrottlerGuard,
},
],
})
export class AppModule {}
### JWT
См. `src/modules/auth`.
Обратитесь к декоратору авторизации в `src/decorators/auth.decorator.ts`.
Декоратор метода `@Auth('admin')` означает необходимость наличия прав администратора.
Декоратор параметра `@UserReq() user: User` получает информацию о текущем пользователе (осуществляется доступ к базе данных).
Аналогично декоратор параметра `@UserJwt() user: JwtDto` получает данные пользователя JWT (не осуществляется доступ к базе данных).
Декоратор метода `AuthUnlogin()` означает, что авторизация не требуется, но будет предпринята попытка получить информацию о вошедшем пользователе.
### Журналы
Для ведения журналов используется `winston`.
См. `src/config` и `src/middleware/logger.middleware.ts`.
## Поддержка
Nest — это проект с открытым исходным кодом, лицензированный по MIT. Он может развиваться благодаря спонсорам и поддержке замечательных сторонников. Если вы хотите присоединиться к ним, пожалуйста, [прочитайте больше здесь](https://docs.nestjs.com/support).
## Оставайтесь на связи
- Автор — Камил Мысливец (Kamil Myśliwiec), [kamilmysliwiec.com](https://kamilmysliwiec.com/).
- Веб-сайт — [nestjs.com](https://nestjs.com/).
- Твиттер — [@nestframework](https://twitter.com/nestframework).
## Лицензия
Nest лицензирован по [MIT](LICENSE).
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )