NestJS学习(一):项目搭建与环境配置

引言

这是NestJS学习的第一步,关于项目的搭建,以及环境的配置,这里使用的包管理工具是pnpm

创建项目

创建项目,直接使用官方的CLI进行搭建即可:

  1. 全局安装脚手架
pnpm add -g @nestjs/cli
  1. 通过脚手架创建项目
nest new nest-basic

在这里插入图片描述
出现选择哪个包管理工具选项,这里我选择pnpm,回车后就会创建项目了呢,目录结构如图
在这里插入图片描述

  1. .controller:控制器:用来分路由,提供接口
  2. .service:服务层:完成一些逻辑层
  3. .module:模块:使用模块或者暴露当前未其他模块使用
  4. .spec:一些测试文件
  • 除了new命令,nest脚手架还提供了如下的常用命令,帮助我们快速创建模板
    • 创建一个curd模板
      nest g resource [name]
      在这里插入图片描述
      如图创建符合某项规范的curd模板,这里先选择REST API,即为符合RESTFUL规范的接口
      在这里插入图片描述
      会在src目录下,创建一个user目录,除基础的控制器服务层模块外,还包括

      • dto(Data Transfer Object)数据传输对象:一般为从数据库中的检索数据
      • entity数据实体对象:对应数据的表结构
    • 单独创建一个控制器、服务层等,具体可看官网内容 nest脚手架使用

环境配置

环境配置方便我们在不同的环境中,获取到不同的配置内容,如数据库信息,NestJS为我们提供了配置模块,结合cross-envjs-yaml就可以根据环境读取yaml文件中的配置内容

pnpm add -D @nestjs/config js-yaml @types/js-yaml cross-env

配置数据,可能会在多个地方进行使用,所以可以把他抽取到一个shared模块中,需要使用时引入这个模块就行

  1. 修改package.json脚本命令
"start:prod": "cross-env NODE_ENV=production node dist/main",
"start:dev": "cross-env NODE_ENV=development nest start --watch",

在入口文件中打印一下NODE_ENV

// main.ts
async function bootstrap() {
  console.log('======', process.env.NODE_ENV);

  const app = await NestFactory.create(AppModule);
  await app.listen(3000);
}

在这里插入图片描述
环境已经成功配置了
2. 创建shared目录,并添加shared模块

import { Module } from '@nestjs/common';
@Module({})
export class SharedModule {}
  1. shared目录下创建config目录,读取环境数据,并加入创建config模块
// configuration.ts   根据环境,读取`yaml`文件,并创建加载器
import { load } from 'js-yaml';
import { readFileSync } from 'fs';
import { join } from 'path';
const yamlFile =
  process.env.NODE_ENV === 'production' ? 'production.yml' : 'development.yml';
console.log(
  '==============',
  load(readFileSync(join(process.cwd(), yamlFile), 'utf8')),
);

main.ts引入该文件,并使用上述两个命令进行测试,结果如下,能够正确读取文件了
在这里插入图片描述
在这里插入图片描述
接下来根据读取结果创建一个load

// configuration.ts
export default () => {
  return load(readFileSync(join(process.cwd(), yamlFile), 'utf8')) as Record<
    string,
    any
  >;
};
  1. 同在config目录下创建文件config-module.ts用于配置nestjs/config
// config-module.ts
import { ConfigModuleOptions } from '@nestjs/config';
import configuration from './configuration';
export const ConfigProvier: ConfigModuleOptions = {
  isGlobal: true,
  load: [configuration],
};
  1. shared module中进行使用
// shared.module.ts
import { Module } from '@nestjs/common';
import { ConfigProvier } from './config/config-module';
import { ConfigModule } from '@nestjs/config';
@Module({
  exports: [ConfigModule],
  imports: [ConfigModule.forRoot(ConfigProvier)],
})
export class SharedModule {}
  1. app module中进行使用
// app.module.ts  引入shared module
import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { SharedModule } from './shared/shared.module';

@Module({
  imports: [SharedModule],
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule {}
// app.controller.ts 中使用
import { ConfigService } from '@nestjs/config';
import { Controller, Get } from '@nestjs/common';
import { AppService } from './app.service';
@Controller()
export class AppController {
  constructor(
    private readonly appService: AppService,
    private readonly configService: ConfigService,
  ) {}
  @Get()
  getHello(): string {
    console.log('=============', this.configService.get<string>('test.env'));
    return this.appService.getHello();
  }
}

访问http://127.0.0.1:3000,控制台打印
在这里插入图片描述

通过这样的方式配置环境之后,在需要使用到配置环境数据时,就只需要和app中使用一样,先在module中引入shared模块,之后使用的地方进行注入即可

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值