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]            //外部可以获取的功能模块
})
相关推荐
剪刀石头布啊32 分钟前
设计一个多计时任务的任务管理功能
前端
码事漫谈43 分钟前
勿删
后端
ModyQyW1 小时前
vite-plugin-uni-manifest 更新了什么
前端·typescript·uni-app
Asize2 小时前
AI 协作开发新范式:我用 SDD 做了个排版 npm 包
前端·人工智能
kyriewen4 小时前
我把今年流传的前端 AI 面试题整理了一遍——4 类场景题+回答框架(附速查表)
前端·面试·程序员
计算机魔术师4 小时前
国产多模态模型正面硬刚Opus旗舰:差距从30%缩到3%
前端
风骏时光牛马4 小时前
程序员进阶:深度思考,解锁职场成长的底层逻辑
前端
IT_陈寒5 小时前
用了Proxy才发现以前的JavaScript白写了
前端·人工智能·后端
唐青枫5 小时前
别把 ArrayList 当成会自动管理内存的 List:Zig 动态数组从入门到实战
后端
鸿蒙开发5 小时前
我为 HarmonyOS 做了一个统一大模型 SDK:@hmkit/ai 正式开源
后端