Nest.js学习记录3

1.路由简单访问

app.controller.ts

TypeScript 复制代码
import { Controller, Get } from '@nestjs/common';
import { AppService } from './app.service';

@Controller("a")    //这里
export class AppController {
  constructor(private readonly appService: AppService) {}
    
  @Get("b")    //和这里
  getHello(): string {
    return this.appService.getHello();
  }
}

访问时输入: localhost:3000/a/b

2.依赖注入

初始代码结构

app.service.ts

TypeScript 复制代码
import { Injectable } from '@nestjs/common';

@Injectable()
export class AppService {
  getHello(): string {
    return 'Hello World!';
  }
}

app.controller.ts

javascript 复制代码
import { Controller, Get } from '@nestjs/common';
import { AppService } from './app.service';

@Controller()
export class AppController {
  constructor(private readonly appService: AppService) {}//这一段是依赖注入
              //私有的 //只读的            注入appservice
  @Get()
  getHello(): string {
    return this.appService.getHello();
  }
}

app.module.ts

TypeScript 复制代码
import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';

@Module({
  imports: [],
  controllers: [AppController],
  providers: [AppService],    //在这注册后才能使用
})
export class AppModule {}

main.ts

TypeScript 复制代码
import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';

async function bootstrap() {
  const app = await NestFactory.create(AppModule);
  await app.listen(3000);
}
bootstrap();

3.写一段简易静态模块

src

config (配置文件夹)

config.module.ts

config.service.ts

configure

app.ts

database.ts

app.controller.ts

app.module.ts

app.service.ts

main.ts

------------------------------项目结构------------------------------------------

config -> config.module.ts

TypeScript 复制代码
import { Module } from '@nestjs/common';
import { ConfigService } from './config.service';

@Module({
    providers: [ConfigService],
    exports:[ConfigService]
})
export class ConfigModule {}

config -> config.service.ts

TypeScript 复制代码
import { Injectable } from '@nestjs/common';
import { readdirSync } from 'fs';
import path from 'path';


@Injectable()
export class ConfigService {
  config = {} as any
  constructor(){
    const config = { path: path.join(__dirname, '../configure') }
    console.log(config)
    readdirSync(config.path).map(async (file)=>{
      if(file.slice(-2) === "js"){
        const module = await import(path.resolve(config.path, file))
        console.log(module.default())
        this.config = {...this.config, ...module.default()}    //获取文件内内容
      }
    })
  }
  get(){
    return this.config.database
  }
}

configure -> app.ts

TypeScript 复制代码
export default ()=>{
    return {
        app: {
            name:"后盾人2"
        }
    }
}

configure -> database.ts

TypeScript 复制代码
export default ()=>{
    return {
        database:{
            host:"localhost"
        }
    }
}

app.controller.ts

TypeScript 复制代码
import { Controller, Get } from '@nestjs/common';
import { ConfigService } from './config/config.service';

@Controller()
export class AppController {
  constructor(private readonly config:ConfigService) {}

  @Get()
  getHello(): any {
    return this.config.get(); 
  }
}

app.module.ts

TypeScript 复制代码
import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { ConfigModule } from './config/config.module';

@Module({
  imports: [ConfigModule],    //这里导入
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule {}

4.做一些小优化

config.service.ts

TypeScript 复制代码
import { Injectable } from '@nestjs/common';
import { readdirSync } from 'fs';
import path from 'path';


@Injectable()
export class ConfigService {
  config = {} as any
  constructor(){
    const config = { path: path.join(__dirname, '../configure') }
    console.log(config)
    readdirSync(config.path).map(async (file)=>{
      if(file.slice(-2) === "js"){
        const module = await import(path.resolve(config.path, file))
        this.config = {...this.config, ...module.default()}
      }
    })
  }
  get(path: string){    //优化了这里
    return path.split('.').reduce((prev, curr) => prev[curr], this.config) // 获取配置
  }
}

使用 app.controller.ts

TypeScript 复制代码
import { Controller, Get } from '@nestjs/common';
import { ConfigService } from './config/config.service';

@Controller()
export class AppController {
  constructor(private readonly config:ConfigService) {}

  @Get()
  getHello(): any {
    return this.config.get("app.name"); 
  }
}

5.创建文件

src -> article

article.controller.ts

TypeScript 复制代码
import { Controller , Get } from '@nestjs/common';

@Controller("article")
export class ArticleController {
  @Get()
  getHello() {
      return "aaeadda"
  }

}

article.module.ts

TypeScript 复制代码
import { Module } from '@nestjs/common';
import { ArticleController } from './article.controller';

@Module({
    controllers:[ArticleController]    //这里要挂载
})
export class ArticleModule {}

app.module.ts

TypeScript 复制代码
import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { ConfigModule } from './config/config.module';
import { ArticleModule } from './article/article.module';

@Module({
  imports: [ConfigModule , ArticleModule],    //这里要导入
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule {}

5.文件的使用

app.controller.ts

这个文件是用来定义 Nest.js 应用的控制器的。控制器负责处理进来的请求,并返回相应的数据或结果。通常在这个文件中定义一些路由和相应的方法来处理这些路由请求。

app.module.ts

这个文件是 Nest.js 应用的主模块文件,负责定义应用的一些配置、引入引用的模块、服务、控制器等,并将它们连接起来。通常在这个文件中会导入各种模块、服务和控制器,以及对应的装饰器来设置应用的一些配置。

app.service.ts

这个文件是定义 Nest.js 应用的服务的。服务用来处理一些业务逻辑,以及提供一些功能性的方法供控制器调用。通常在这个文件中会定义一些数据操作的方法,例如与数据库的交互、调用外部 API 等操作。

TypeScript 复制代码
@Module({
    imports: [ConfigModule],           //引入挂载的模块
    controllers:[ArticleController]    //控制的路由模块
    providers: [ConfigService],        //提供功能模块
    exports:[ConfigService]            //外部可以获取的功能模块
})
相关推荐
尘浮生几秒前
Java项目实战II基于Spring Boot的光影视频平台(开发文档+数据库+源码)
java·开发语言·数据库·spring boot·后端·maven·intellij-idea
尚学教辅学习资料8 分钟前
基于SpringBoot的医药管理系统+LW示例参考
java·spring boot·后端·java毕业设计·医药管理
别拿曾经看以后~1 小时前
【el-form】记一例好用的el-input输入框回车调接口和el-button按钮防重点击
javascript·vue.js·elementui
我要洋人死1 小时前
导航栏及下拉菜单的实现
前端·css·css3
川石课堂软件测试1 小时前
性能测试|docker容器下搭建JMeter+Grafana+Influxdb监控可视化平台
运维·javascript·深度学习·jmeter·docker·容器·grafana
科技探秘人1 小时前
Chrome与火狐哪个浏览器的隐私追踪功能更好
前端·chrome
monkey_meng1 小时前
【Rust中的迭代器】
开发语言·后端·rust
科技探秘人1 小时前
Chrome与傲游浏览器性能与功能的深度对比
前端·chrome
余衫马1 小时前
Rust-Trait 特征编程
开发语言·后端·rust
JerryXZR1 小时前
前端开发中ES6的技术细节二
前端·javascript·es6