配置
注意:在构建过程中,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();
}
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。