配置

注意:在构建过程中,Nest CLI 不会自动将 "assets"(非 TS 文件)移动到 dist 文件夹。为了确保你的 YAML 文件被复制,你必须在 nest-cli.json 文件的 compilerOptions#assets 对象中指定它。例如,如果 config 文件夹与 src 文件夹处于同一级别,则添加值为 "assets": [{"include": "../config/*.yaml", "outDir": "./dist/config"}] 的 compilerOptions#assets。

自定义配置文件

自定义配置文件导出返回配置对象的工厂函数。配置对象可以是任意嵌套的普通 JavaScript 对象。

  • config/configuration.ts
export default () => ({
  port: parseInt(process.env.PORT, 10) || 3000,
  database: {
    host: process.env.DATABASE_HOST,
    port: parseInt(process.env.DATABASE_PORT, 10) || 5432
  }
});

我们使用传递给 ConfigModule.forRoot() 方法的选项对象的 load 属性加载此文件:

import configuration from './config/configuration';

@Module({
  imports: [
    ConfigModule.forRoot({
      load: [configuration],
    }),
  ],
})
export class AppModule {}

获取请求IP地址

import { mw as requestIpMw } from 'request-ip';
async function bootstrap() {
  const app = await NestFactory.create(AppModule, {
    cors: true, // 开启跨域访问
  });
  app.use(requestIp({ attributeName: 'ip' }));
  await app.listen(3000);
}
@Controller()
export class AppController {
  constructor(private readonly appService: AppService) {}
  @Get()
  getHello(@Req() req: Request) {
    console.log(req.ip);
    return this.appService.getHello();
  }
}

参数验证

import { ValidationPipe } from '@nestjs/common';

// 全局验证
app.useGlobalPipes(
  new ValidationPipe({
    // 自动将有效负载转换为根据其 DTO 类类型化的对象
    transform: true,
    // 如果设置为 true,验证器将删除已验证(返回)对象的任何不使用任何验证装饰器的属性
    whitelist: true,
  }),
);

创建DTO

import { IsEmail, IsNotEmpty } from 'class-validator';

export class CreateUserDto {
  @IsEmail()
  email: string;

  @IsNotEmpty()
  password: string;
}

controller

@Controller()
export class AppController {
  @Post()
  postHello(@Body() createUserDto: CreateUserDto): string {
    console.log(createUserDto);
    return this.appService.getHello();
  }
}

看见了
876 声望16 粉丝

前端开发,略懂后台;


引用和评论

0 条评论