nest.js学习笔记2

nest.js学习笔记2

Leslie Shi

nest.js学习笔记2

依赖项注入图示

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
//对于moudle的笔记,每个应用程序的根模块衍生子模块,
//应用程序,生成的架构将使用多个模块,每个模块封装了一组紧密相关的功能
import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { UserModule } from './user/user.module';
//新建模块注入module的话,如下
@Module({
//此处
imports: [UserModule],//导出此模块所需的提供程序的导入模块列表.
controllers: [AppController],//此模块中定义的必须实例化的控制器集.
providers: [AppService],//注入器实例化并且至少可以在该模块中共享的提供程序享。
})
export class AppModule {}

1.1 service(服务)

  • 1.先创建user.service.ts;
  • 2.import { CreateUserDto } from './dto/create-user.dto';这个上一篇的2.2 请求负载内有介绍;
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    //@Injectable()装饰器 =>声明UsersService是一个
    //可以由Nest IoC容器管理的类。
    import { Injectable } from '@nestjs/common';
    //请求负载
    import { CreateUserDto } from './dto/create-user.dto';

    @Injectable()
    //该类有两个方法,会在Controller中使用。
    export class UserService {
    private Person: CreateUserDto[] = [];
    create(userinfo: CreateUserDto) {
    this.Person.push(userinfo);
    return this.Person;
    }

    findOne(name: string) {
    const res = this.Person.find((item: CreateUserDto) => {
    return item.name === name;
    });
    return res;
    }
    }
    在Controller中使用
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    import {
    Body,
    Controller,
    Get,
    Param,
    Post,
    // Delete,
    } from '@nestjs/common';
    import { UserService } from './user.service';
    import { CreateUserDto } from './dto/create-user.dto';

    @Controller('user')
    export class UserController {
    //通过类构造函数注入的。使用private语法
    constructor(private readonly userService: UserService) {}

    @Post('/add')
    async create(@Body() createUserDto: CreateUserDto) {
    const res = await this.userService.create(createUserDto);
    return {
    res,
    msg: 'success',
    code: 200,
    };
    }

    @Get('/findOne')
    async findOne(@Param() id: string) {
    const res = await this.userService.findOne(id);
    if (res) {
    return {
    res,
    code: 200,
    msg: 'success',
    };
    } else {
    return {
    code: 400,
    msg: 'fail',
    };
    }
    }
    }

2 热重载问题

每次更新或者编写代码对typeScript进行重新编译,对开发模式很不友好,可以通过webpack的HMR(热模块替换)进行简化迭代。
两种情况:
1.用nest cli,

1
2
安装
npm i --save-dev webpack-node-externals run-script-webpack-plugin webpack

安装完成后,在应用程序的根目录中创建一个名为 webpack-hmr.config.js 的文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
const nodeExternals = require('webpack-node-externals');
const { RunScriptWebpackPlugin } = require('run-script-webpack-plugin');

module.exports = function (options, webpack) {
return {
...options,
entry: ['webpack/hot/poll?100', options.entry],
externals: [
nodeExternals({
allowlist: ['webpack/hot/poll?100'],
}),
],
plugins: [
...options.plugins,
new webpack.HotModuleReplacementPlugin(),
new webpack.WatchIgnorePlugin({
paths: [/\.js$/, /\.d\.ts$/],
}),
new RunScriptWebpackPlugin({ name: options.output.filename, autoRestart: false }),
],
};
};

之后在main.js中

1
2
3
4
5
6
7
8
9
10
11
12
declare const module: any;

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

if (module.hot) {
module.hot.accept();
module.hot.dispose(() => app.close());
}
}
bootstrap();

在pakeage.json中更新变量

1
"dev": "nest build --webpack --webpackPath webpack-hmr.config.js --watch",

后重新启动终端显示为

1
2
3
4
5
6
7
8
9
10
11
webpack 5.90.1 compiled successfully in 5534 ms
[Nest] 7700 - 2024年06月13日 下午4:51:28 LOG [NestFactory] Starting Nest application...
[Nest] 7700 - 2024年06月13日 下午4:51:29 LOG [InstanceLoader] AppModule dependencies initialized +15ms
[Nest] 7700 - 2024年06月13日 下午4:51:29 LOG [InstanceLoader] UserModule dependencies initialized +0ms
[Nest] 7700 - 2024年06月13日 下午4:51:29 LOG [RoutesResolver] AppController {/api}: +10ms
[Nest] 7700 - 2024年06月13日 下午4:51:29 LOG [RouterExplorer] Mapped {/api, GET} route +4ms
[Nest] 7700 - 2024年06月13日 下午4:51:29 LOG [RouterExplorer] Mapped {/api/test, GET} route +1ms
[Nest] 7700 - 2024年06月13日 下午4:51:29 LOG [RoutesResolver] UserController {/api/user}: +1ms
[Nest] 7700 - 2024年06月13日 下午4:51:29 LOG [RouterExplorer] Mapped {/api/user/add, POST} route +1ms
[Nest] 7700 - 2024年06月13日 下午4:51:29 LOG [RouterExplorer] Mapped {/api/user/findOne, GET} route +0ms
[Nest] 7700 - 2024年06月13日 下午4:51:29 LOG [NestApplication] Nest application successfully started +5ms
评论