本篇文章给大家谈谈有谁买过麻将挂先试用再付款,以及有没有先使用的麻将挂对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。 大家说说愚人节有什么好的...
2025-11-03 0
用于处理路由请求
路由的三种参数 Param Query Body
Param: restful API 参数
Query:url 参数
Body:post 参数
Param 就是获取 /xxx/:id
@Get('/data/:id')getData(@Param() param): string { #技术分享 console.log(' ~ AppController ~ getData ~ param:', param) return 'data' +} @Controller('user') export class UserController { @Get('/:id') getUser(@Param('id', ParseIntPipe) id: number) { console.log(' ~ UserController ~ id:', typeof id) return 'get user' + id } } Body
@Post('/data') postData(@Body() body): string { console.log(' ~ AppController ~ postData ~ body:', body) return 'post data' }Query /xxx/xxx?id=xxx¶m=222
@Get('/data/:id') getData(@Param() param, @Query() query): string { console.log(' ~ AppController ~ getData ~ param:', param) console.log(' ~ AppController ~ getData ~ query:', query) return 'data' + param.id }就是提供方法 哪里需要使用这个方法就在哪里进行注入
其实拿 koa2 来进行举例就是
controller 是进行路由对接的 然后执行具体的函数方法 是在 service 里面执行的 数据库的修改就是进一层的里
import { Module } from '@nestjs/common'import { AppController } from './app.controller'import { AppService } from './app.service'@Module({ imports: [], controllers: [AppController], providers: [AppService],})export class AppModule {}@Get('/data/:id') getData(@Param() param): string { return this.appService.getData(param) }import { Injectable } from '@nestjs/common'@Injectable()export class AppService { getData(param: any) { console.log(' ~ AppService ~ getData ~ param:', param) return 'data' + param.id }}import { ExceptionFilter, Catch, ArgumentsHost, HttpException } from '@nestjs/common'import { Request, Response } from 'express'@Catch(HttpException)export class HttpExceptionFilter implements ExceptionFilter { catch(exception: HttpException, host: ArgumentsHost) { const ctx = host.switchToHttp() const response = ctx.getResponse<Response>() const request = ctx.getRequest<Request>() const status = exception.getStatus() response.status(status).json({ statusCode: status, message: exception.message, type: 'error', timestamp: new Date().toISOString(), path: request.url, }) }}main.ts
import { NestFactory } from '@nestjs/core'import { AppModule } from './app.module'import { HttpExceptionFilter } from './common/exception/http-exception.filter'import { VersioningType } from '@nestjs/common'async function bootstrap() { const app = await NestFactory.create(AppModule) app.setGlobalPrefix('api') app.enableVersioning({ type: VersioningType.URI, defaultVersion: '1' }) app.useGlobalFilters(new HttpExceptionFilter()) await app.listen(3000)}bootstrap().catch((err) => console.error(err))安装配置依赖
pnpm add @nestjs/config根目录下创建配置文件 .env (该文件不进行提交) 我们创建.env.example 进行提交到代码仓库
.env
APP_NAME=nest-adminDB_TYPE=mysql DB_HOST=localhost DB_PORT=3306 DB_USERNAME= DB_PASSWORD= DB_DATABASE= DB_SYNCHRONIZE=false创建 config 模块文件
./common/config
import { registerAs } from '@nestjs/config'export default registerAs('app', () => { return { name: process.env.APP_NAME, }})import { registerAs } from '@nestjs/config'export default registerAs('database', () => { return { type: process.env.DB_TYPE || 'mysql', host: process.env.DB_HOST || 'localhost', port: parseInt(process.env.DB_PORT, 10) || 3306, username: process.env.DB_USERNAME, password: process.env.DB_PASSWORD, database: process.env.DB_DATABASE, synchronize: process.env.DB_SYNCHRONIZE === 'true', }})import appConfig from './app.config'import dbConfig from './db.config'export default [appConfig, dbConfig]再app.module.ts 进行导入使用
import { Module } from '@nestjs/common'import { AppController } from './app.controller'import { AppService } from './app.service'import { UserModule } from './modules/user/user.module'import { AuthController } from './modules/auth/auth.controller'import { AuthModule } from './modules/auth/auth.module'import { ConfigModule } from '@nestjs/config'import config from './common/config'@Module({ imports: [ ConfigModule.forRoot({ isGlobal: true, load: [...config], }), UserModule, AuthModule, ], controllers: [AppController, AuthController], providers: [AppService],})export class AppModule {}再具体的模块之中进行使用
import { Controller, Get, Inject } from '@nestjs/common'import { ConfigType } from '@nestjs/config'import appConfig from './common/config/app.config'@Controller()export class AppController { constructor( private readonly appService: AppService, @Inject(appConfig.KEY) private readonly app: ConfigType<typeof appConfig>, ) {} @Get('/test') getTest(): string { console.log(' ~ AppController ~ getTest ~ this.app.name:', this.app) return this.app.name }}mysql 数据库创建
数据库名: admin-dev字符集: utf8排序规则: utf8 general cipnpm install --save @nestjs/typeorm typeorm mysql2import { Module } from '@nestjs/common'import { AppController } from './app.controller'import { AppService } from './app.service'import { UserModule } from './modules/user/user.module'import { AuthController } from './modules/auth/auth.controller'import { AuthModule } from './modules/auth/auth.module'import { ConfigModule, ConfigService } from '@nestjs/config'import config from './common/config'import { TypeOrmModule, TypeOrmModuleOptions } from '@nestjs/typeorm'@Module({ imports: [ ConfigModule.forRoot({ isGlobal: true, load: [...config], }), TypeOrmModule.forRootAsync({ inject: [ConfigService], useFactory: (configService: ConfigService) =>({ type: configService.get('database.type'), host: configService.get('database.host'), port: configService.get('database.port'), username: configService.get('database.username'), password: configService.get('database.password'), database: configService.get('database.database'), synchronize: configService.get('database.synchronize'), autoLoadEntities: true, }) as TypeOrmModuleOptions, }), UserModule, AuthModule, ], controllers: [AppController, AuthController], providers: [AppService], }) export class AppModule {} import { Column, Entity, PrimaryGeneratedColumn, Unique } from 'typeorm'@Entity('admin_user')export class User { @PrimaryGeneratedColumn() id: number @Column() @Unique(['username']) username: string @Column() password: string @Column() role: string @Column() nickname: string @Column() active: boolean}import { Module } from '@nestjs/common'import { UserController } from './user.controller'import { TypeOrmModule } from '@nestjs/typeorm'import { User } from './user.entity'import { UserService } from './user.service'@Module({ imports: [TypeOrmModule.forFeature([User])], controllers: [UserController], providers: [UserService],})export class UserModule {}import { Injectable } from '@nestjs/common'import { InjectRepository } from '@nestjs/typeorm'import { User } from './user.entity'import { Repository } from 'typeorm'@Injectable()export class UserService { constructor( @InjectRepository(User) private readonly userRepository: Repository<User>, ) {} findOne(id: number) { return this.userRepository.findOne({ where: { id } }) }}import { Controller, Get, Param, ParseIntPipe } from '@nestjs/common'import { UserService } from './user.service'@Controller('user')export class UserController { constructor(private readonly userService: UserService) {} @Get('/:id') getUser(@Param('id', ParseIntPipe) id: number) { return this.userService.findOne(id) }}nest g gu modules/authimport { Module } from '@nestjs/common'import { AuthService } from './auth.service'import { AuthController } from './auth.controller'import { APP_GUARD } from '@nestjs/core'import { AuthGuard } from './auth.guard'@Module({ controllers: [AuthController], providers: [ AuthService, { provide: APP_GUARD, useClass: AuthGuard, }, ],})export class AuthModule {}如果只是定义单个的守卫 那么就不需要再 这个module里面写任何东西 只需要创建一个守卫 然后哪里需要哪里注入即可
这里我们注册的是全局路由守卫 就是每一个路由请求都会进入到这个守卫里面
import { applyDecorators, SetMetadata, UseGuards } from '@nestjs/common'import { AuthGuard } from './auth.guard'export const IS_PUBLIC_KEY = 'isPublic'export function Auth() { return applyDecorators(SetMetadata(IS_PUBLIC_KEY, true), UseGuards(AuthGuard))}import { CanActivate, ExecutionContext, Injectable } from '@nestjs/common'import { Reflector } from '@nestjs/core'import { Observable } from 'rxjs'import { IS_PUBLIC_KEY } from './auth.decorator'@Injectable()export class AuthGuard implements CanActivate { constructor(private reflector: Reflector) {} canActivate(context: ExecutionContext): boolean | Promise<boolean> | Observable<boolean> { const isPublic = this.reflector.getAllAndOverride<boolean>(IS_PUBLIC_KEY, [ context.getHandler(), context.getClass(), ]) if (isPublic) { return true } return false }}使用
import { Controller, Post } from '@nestjs/common'import { Auth } from './auth.decorator'@Controller('auth')export class AuthController { @Auth() @Post('login') login() { return 'login' }}
相关文章
本篇文章给大家谈谈有谁买过麻将挂先试用再付款,以及有没有先使用的麻将挂对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。 大家说说愚人节有什么好的...
2025-11-03 0
在数字化浪潮下,企业要想在竞争激烈的市场中脱颖而出,线上曝光已成为制胜关键。尤其在青岛,越来越多企业意识到,想要品牌真正被看见,必须做好系统的青岛网络...
2025-11-03 0
C controller 控制用于处理路由请求路由的三种参数 Param Query BodyParam: restful API 参数Query:u...
2025-11-03 2
印度周日成功发射了其航天史上最重的通信卫星,这场壮观的航天盛事在该国南部安得拉邦的斯里哈里科塔航天中心上演。当地时间下午5点26分,伴随着震耳欲聋的轰...
2025-11-03 0
IT之家 11 月 3 日消息,博主 @数码闲聊站 今天在微博发文,透露某厂 6.31 英寸、1.5K 分辨率小屏机的最新动向。IT之家在此援引博主表...
2025-11-03 3
今天店里的新收银员又双叒跑了!从应聘到消失不到6小时创下本超市最快离职纪录原因离谱又心酸——破电脑卡壳没出小票顾客直接走人20块钱从她工资扣干半天倒贴...
2025-11-03 3
11月3日,国芯科技(688262.SH)微信公众号发文,截至2025年9月30日,公司汽车电子芯片累计出货量突破2000万颗。公司深耕国产嵌入式CP...
2025-11-03 2
本篇文章给大家谈谈手机玩十三水好牌差牌规律,以及手机十三水能不能调胜率对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。 福建十三水玩法的详细规则...
2025-11-03 2
发表评论