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",
这样配置完成后,我们就可以使用热加载功能了。