nestjs - 05

Nestjs swagger接口文档

1、安装模块
npm i @nestjs/swagger swagger-ui-express
2、配置
// main.ts 配置
import { NestFactory } from '@nestjs/core'
import { AppModule } from './app.module'
import { SwaggerModule, DocumentBuilder } from '@nestjs/swagger'

async function bootstrap()  {
  const app = await NestFactory.create(AppModule)
  // swagger 配置
  const options = DocumentBuilder().set('swagger文档的标题').setDescription('文档描述信息').setVersion('文档版本号 eg: 1').build()
  const document = SwaggerModule.createDocument(app, options)
  // 设置文档路径: eg: localhost:3000/api-docs 
  SwaggerModule.setup('/api-docs', app, document)
}
3、常用decorator 配置
// controller.ts
import { Controller, Get } from '@nestjs/common'
import { ApiTags, ApiParam, ApiQuery, ApiResponse, ApiOperation, ApiBearerAuth } from '@nestjs/swagger'

@Controller()
// api分组 ,如图 1-1
@ApiTags('测试接口')
export class DemoController {
  
  @Get()
	// 接口描述 如图 1-2
  @ApiOperation({ summary: '接口名称', description: '更详细的描述' })
  // 查询参数藐视
  @ApiQuery({ name: 'page', description: '分页信息描述', required: true, type: Number })
  // 自定义返回描述信息 如图1-4
  @ApiResponse({ status: 403, description: '自定义描述信息' })
  findAll() {
    return 'all'
  }
  
  @Get(':id')
  // 动态参数描述 如图 1-3
  @ApiParam({ name: 'id', description: '详细描述', required: true, type: Number })
  findOne(id) {
    return 'select one'
  }
}


// create.dot.ts 
// post的参数装饰 ApiProperty
import { ApiProperty } from '@nestjs/swagger'

export class CreateDto {
  // 如 图1-5
  @ApiProperty()
  name: string
  @ApiProperty()
  age: number
}

// controller
export class DemoController {
  @Post()
  create(@Body() createDto: CreateDto) {
    
  }
}

添加接口 jwt 权限控制(如 图1-6)

// main.ts
import { SwaggerModule, DocumentBuilder } from '@nestjs/swagger'
// swagger 配置 添加权限配置 addBearerAuth
const options = DocumentBuilder().addBearerAuth().set('swagger文档的标题').setDescription('文档描述信息').setVersion('文档版本号 eg: 1').build()


// controller.ts
import { ApiBearerAuth } from '@nestjs/swagger'
@Controller()
@ApiBearerAuth()
export class DemoController() {}

图1-1

图1-1

图1-2

图1-2

图1-3

图1-3

图1-4

图1-4

图1-5

图1-5

图1-6

图1-6

<think>我们是在NestJS框架中,目标是打印系统时间(注意:不是时区,而是当前的时间) 在NestJS中,我们可以使用JavaScript/TypeScript的Date对象来获取当前系统时间。 但是,根据引用的内容,我们也可以结合日志模块(如引用5提到的pino或winston)来记录时间,但用户的需求只是打印系统时间。 步骤: 1. 在需要打印的地方,使用 new Date() 获取当前时间。 2. 可以选择将其转换为字符串或特定格式。 3. 使用NestJS内置的Logger或者console.log打印。 但是注意:在NestJS中,推荐使用内置的Logger服务(引用5提到了一些日志模块,但NestJS有自带的Logger)。我们可以使用依赖注入来使用Logger,也可以直接使用console。 考虑到引用5中提到了日志模块,我们可以使用Logger来打印,这样会统一日志格式。 示例代码: 在服务中,我们可以这样写: 首先,在模块中,我们可以使用NestJS的内置Logger,也可以通过依赖注入自定义日志(如使用pino或winston),但为了简单,我们使用内置的。 方法一:在服务中直接使用内置Logger(需要注入) 方法二:使用console 这里我们展示使用内置Logger的方式。 注意:在控制器中,我们可以通过构造函数注入Logger(NestJS内置的Logger服务),但注意,内置Logger默认是打印到控制台。 根据引用5,我们也可以集成其他日志模块,但用户问题只是打印系统时间,所以我们用内置的即可。 具体步骤: 1. 在控制器或服务中引入Logger。 2. 使用new Date()获取当前时间并格式化为字符串(或者直接使用Date的toString等方法)。 3. 使用Logger的log方法打印。 另外,我们也可以使用Day.js或date-fns等库来格式化,但这里我们使用原生Date。 示例代码(在控制器中): ``` import { Controller, Logger } from '@nestjs/common'; @Controller('example') export class ExampleController { private readonly logger = new Logger(ExampleController.name); someMethod() { const currentTime = new Date().toISOString(); // 或者使用其他格式,如toLocaleString等 this.logger.log(`当前系统时间: ${currentTime}`); } } ``` 或者,如果我们想要动态获取时间并打印,可以在某个路由处理函数中。 另外,如果我们不使用Logger,也可以直接用console.log,但这样不会经过NestJS的日志系统格式化,也不利于统一管理。 根据引用4,我们可以快速生成控制器和服务,然后在其中添加打印时间的代码。 总结:在NestJS中打印系统时间,核心是使用JavaScript的Date对象,然后通过Logger或console输出。 注意:时区问题。系统时间取决于运行环境设置的时区。如果我们需要确保时区正确,可能需要设置环境时区(如TZ环境变量)或使用UTC时间。 但用户没有要求时区,所以直接打印即可。 生成相关问题: 1. 如何在NestJS中格式化日期时间? 2. NestJS中如何配置日志级别? 3.NestJS中如何处理时区敏感的时间? 4. NestJS中如何自定义日志格式? 注意:我们引用了[^4](关于NestJS命令)和[^5](关于日志模块),所以可以在回答中引用。 </think>在 NestJS 中打印系统时间,可以通过以下方法实现: ### 方法 1:使用 JavaScript Date 对象(基础方式) ```typescript import { Controller, Get } from '@nestjs/common'; @Controller('time') export class TimeController { @Get() getTime() { // 获取当前系统时间 const currentTime = new Date(); // 转换为ISO字符串格式 (UTC) const isoTime = currentTime.toISOString(); // 转换为本地时间字符串 const localTime = currentTime.toLocaleString(); return { timestamp: currentTime.getTime(), // 时间戳(毫秒) isoTime, localTime, // 其他格式 dateString: currentTime.toDateString(), timeString: currentTime.toTimeString() }; } } ``` 访问 `/time` 端点将返回: ```json { "timestamp": 1715000000000, "isoTime": "2025-05-05T12:00:00.000Z", "localTime": "2025/5/5 20:00:00", "dateString": "Mon May 05 2025", "timeString": "20:00:00 GMT+0800 (中国标准时间)" } ``` ### 方法 2:使用日志模块打印(推荐) 结合日志模块(如 `nestjs-pino`)在控制台输出时间[^5]: ```typescript import { Controller, Logger } from '@nestjs/common'; @Controller('example') export class ExampleController { private readonly logger = new Logger(ExampleController.name); @Get('log-time') logTime() { const now = new Date(); this.logger.log(`当前系统时间: ${now.toLocaleString()}`); return { status: '时间已记录到日志' }; } } ``` 控制台输出示例: ``` [Nest] 1234 - 05/05/2025, 8:00:00 PM 当前系统时间: 2025/5/5 20:00:00 ``` ### 方法 3:使用 Day.js 库(高级格式化) 安装 Day.js: ```bash npm install dayjs ``` 使用示例: ```typescript import * as dayjs from 'dayjs'; // 在服务类中 formatTime() { return { basic: dayjs().format(), // 2025-05-05T20:00:00+08:00 custom: dayjs().format('YYYY-MM-DD HH:mm:ss'), utc: dayjs().utc().format(), timestamp: dayjs().valueOf() // 毫秒时间戳 }; } ``` ### 关键说明 1. **时区处理** `new Date()` 自动使用操作系统时区,可通过 `process.env.TZ` 设置时区: ```bash # 启动前设置时区 TZ="Asia/Shanghai" nest start ``` 2. **日志最佳实践** - 生产环境使用结构化日志(JSON 格式) - 通过 `Logger.verbose()` 记录详细时间信息 - 避免在构造函数中打印时间(防止多次初始化)[^5] 3. **时间一致性建议** 在分布式系统中: ```typescript // 统一使用UTC时间存储和传输 const utcTime = dayjs().utc().format(); // 前端按需转换为本地时间 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值