Nest.js入门

725 阅读3分钟

1. 全局安装NestJS CLI

当有Node环境后,也设置npm的源后,就可以正式进行NestJS的学习了。NestJS的安装需要CLI命令,先来安装NestJS CLI工具。

cnpm i -g @nestjs/cli

如果使用npm 进行安装,速度可能会很慢。

2. 创建NestJS项目

等待nestjs/cli 安装完成后,就可以创建一个新的项目。

nest new nestjs-demo

3. 新建NestJS模块

输入下面的命令,新建一个模块。

nest g module girl

稍等一会,在/src目录下,就自动建立了一个girl的文件夹,在文件夹里还自动生成了girl.module.ts的。 再返回/src目录,可以看到在app.module.ts文件里,给我们自动引入了刚刚创建的模块。

import { Module } from '@nestjs/common';
import { GirlModule } from './girl/girl.module';

@Module({
  imports: [GirlModule],
  controllers: [],
  providers: [],
})
export class AppModule {}

创建一个controller.

nest g controller girl --no-spec 

稍等一会,它自动为我们在/src/girl目录下,创建了girl.controller.ts文件。有了这个文件以后,我们就可以在这个文件里创建路由了。编写下面的代码:

import { Controller, Get } from '@nestjs/common';

@Controller('girl')
export class GirlController {

  @Get()
  getGirls():any{
    return{
      code:0,
      data:['翠花','小红','大丫'],
      msg:'请求女孩列表成功'
    }
  }
}

创建一个service.

nest g service girl --no-spec

稍等一会,就会给我们两句提示。

CREATE src/girl/girl.service.ts (88 bytes)
UPDATE src/girl/girl.module.ts (240 bytes)

看到这个就说明我们已经创建成功了。

4. REST Client 的使用

是VSCode的一个用于发送请求的插件。

当插件安装完成后,就可以在项目根目录下创建一个/RESTClient/demo.http的文件,然后编写下面的代码。

POST http://localhost:3000/girl/add HTTP/1.1

点击Send Request按钮,发送请求,如果一切正常,我们就可以看到请求返回的结果了。

5. 安装TypeORM

上节中说了,TypeORM是NestJS官方推荐的工具库,所以我们也先来讲解TypeORM。我们采用命令行的方式进行安装。

npm install --save @nestjs/typeorm typeorm mysql2

引入TypeORM

我们直接再/src/app.module.ts 中引入typeorm

import { TypeOrmModule } from '@nestjs/typeorm';

@Module({
  imports:[ TypeOrmModule.forRoot({
    type:'mysql',           // 数据库类型
    host:'localhost',       // 数据库的连接地址host
    port:3306,              // 数据库的端口 3306
    username:'root',        // 连接账号
    password:'root123',     // 连接密码
    database:'test_db',     // 连接的表名
    retryDelay:500,         // 重试连接数据库间隔
    retryAttempts:10,       // 允许重连次数
  })],
  controllers: [GirlController],
  providers: [GirlService],
  
})

目前所有的MySql类型如下:

int, tinyint, smallint, mediumint, bigint, float, double, dec, decimal, 
numeric, date, datetime, timestamp, time, year, char, varchar, nvarchar,
 text, tinytext, mediumtext, blob, longtext, tinyblob, mediumblob, longblob, 
 enum, json, binary, geometry, point, linestring, polygon, multipoint,
  multilinestring, multipolygon, geometrycollection

6. 为NestJS增加热重载功能

热重载的作用

热重载会对比代码变化,然后只重新编译变化的文件,而不是所有的文件都重新编译。

需要说明的是,配置热重载只适合在项目初期,就是开发阶段。如果你项目进入维护阶段,建议去掉热重载功能。因为它对实体(Entities)和静态文件支持的不是很好。官方也是因为没办法完美的解决一些问题,所以没有加入热重载功能。

配置热重载

1.安装依赖包 配置热重载首先要安装相关的依赖,这里直接使用npm进行安装

$ npm i --save-dev webpack-node-externals run-script-webpack-plugin webpack

2.增加配置文件 安装完成后,我们需要在项目根目录下增加一个webpack-hmr.config.js的配置文件。有了文件后,再把下面的代码复制到文件里。

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 
            }), 
        ], 
     }; 
};

3.修改对应代码 有了配置文件后,还需要手段增加一段新代码,让项目支持热加载,这段代码是增加到/src/main.ts文件下面的。

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

增加后,文件会报hot不存在的错误,所以我们需要安装一个新的依赖包,使用npm进行安装。

$ npm i -D @types/webpack-env

安装完成,再回来看main.ts文件,发现错误已经消失了。 4.替换启动脚本 上面的配置完成后,我们需要替换package.json中的start:dev脚本。

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

这样配置完成后,我们就可以使用热加载功能了。