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]            //外部可以获取的功能模块
})
相关推荐
子兮曰13 小时前
OpenClaw入门:从零开始搭建你的私有化AI助手
前端·架构·github
Victor35613 小时前
https://editor.csdn.net/md/?articleId=139321571&spm=1011.2415.3001.9698
后端
吴仰晖13 小时前
使用github copliot chat的源码学习之Chromium Compositor
前端
1024小神13 小时前
github发布pages的几种状态记录
前端
Victor35613 小时前
Hibernate(89)如何在压力测试中使用Hibernate?
后端
朝朝暮暮an15 小时前
Day 3|Node.js 异步模型 & Promise / async-await(Part 1)
node.js
灰子学技术15 小时前
go response.Body.close()导致连接异常处理
开发语言·后端·golang
阿蒙Amon15 小时前
TypeScript学习-第10章:模块与命名空间
学习·ubuntu·typescript
不像程序员的程序媛16 小时前
Nginx日志切分
服务器·前端·nginx
Daniel李华16 小时前
echarts使用案例
android·javascript·echarts