Skip to content

搞英语 → 看世界

翻译英文优质信息和名人推特

Menu
  • 首页
  • 作者列表
  • 独立博客
  • 专业媒体
  • 名人推特
  • 邮件列表
  • 关于本站
Menu

Nest.js快速启动API项目

Posted on 2022-08-15

巢穴.png

出现了一个新项目,一个不同的任务和这个客户团队的团队管理,而适用的系统也有同样的流程,最近的中心之类的。的新项目需要在另外两个平台之类。之间做一些事情。目前只需要先设置其中的 API,因此我们选择使用 NodeJS 的框架Nest.js来实现其中一个 API。

快速启动

开启estjs项目有3种接入的方式。

使用鸟巢自带的工具
npm i -g @nestjs/cli
嵌套新项目名称

不这种方式,也可以建议在节点安装类的工具,这样可以方便的各种nestjs的模块,比如控制器和服务类的。

直接使用starter项目

这里还有一个用于启动的样例项目,可以直接使用。

 git clone https://github.com/nestjs/typescript-starter.git my-app
cd 我的应用程序
npm 安装
npm 运行开始

这个项目信息还是把Typescript。不过要记得之前的git删掉了。

用 npm 安装所需的包
npm i --save @nestjs/core @nestjs/common rxjs 反射元数据

安装nestjs的core和common就可以,rxjs和react-metadata也是必须的。

比较,目录的类别是由自己创建的。不过也可以使用类别的类别创建自己的类别,控制器之类的自动创建好。

类似的语言API,可以嵌套很多框架,类似的,自动生成或者替换其他的,这样约定的习惯非常重要,不要创造一些“特殊”的结构避免以后坑坑洼洼。

创建控制器

创建好项目之后,我创建了一个controller,nest.js中的controller可以通过没有一个路由类的文件配置直接提供路由。

嵌套 g 控制器项目

nest.js目录约定是按业务模块划分,因为src目录中会出现一个projects的目录,该目录下会生成一个projects.controller,以及设备的单元测试。

创建服务

授权创建服务,用于目标任务管理平台关于项目的API。

巢g服务项目

创建controller和service管理模块里,可以在每次加入后用git diff查看一下生成哪些代码,也好心理有数。

从“@nestjs/common”导入{控制器、获取、请求};
从“快递”进口{请求};
从'src/interfaces/project.interface'导入{项目};
从'./projects.service'导入{ ProjectsService };

@Controller('项目')
导出类 ProjectsController {
构造函数(私人项目服务:ProjectsService){}

@得到()
findAll(@Req() 请求:请求):项目 [] {
返回 this.projectsService.findAll();
}
}
从'@nestjs/common'导入{可注射};
从'src/interfaces/project.interface'导入{项目};

@Injectable()
导出类 ProjectsService {
findAll(): 项目[] {
返回 [];
}
}

结构和修饰

我想特别说明一下的是,虽然我的服务和服务都使用了相同的,但他们是很多人。只是项目名称和服务说的都是一个,而控制器不是它们的不同之处在于,它们的意义,也有一个典型的过程,平均过程中更好的拥有更多的平均数,比比皆是。如果只是把这个对象这个毫无变化的映射出来,那过程是毫无意义的。

这里的服务实际上是提供者的一种,而提供者的意义是从不同的地方提供的数据或其他东西。而控制器的名称projects是指我创建的API所要的数据是项目,所以它们在这里提供的API确实是同一个东西,名称也一样。

一下的业务逻辑是需要从目标任务管理平台获取项目,然后过滤出不同特性的项目设置,他们记录一种任务任务,需要分配给人员;另一种叫注释,只是标记。于是我创建了2个控制器,taskController和noteController,但是,它们都调用ProjectsService去使用不同的过滤条件获取数据。

HTTP请求

使用nest.js官方Http模块HttpModule就可以向其他API发出请求。该模块本身也是封装的Axios,所以起来很方便。先安装相关模块。

 npm i --save @nestjs/axios axios

然后在app.module中引入。

从“@nestjs/axios”导入 { HttpModule };
...

@模块({
imports: [HttpModule], // 引入Http模块
控制器:[项目控制器],
提供者:[ProjectsService],
})
导出类 AppModule {}
处理 Axios 对象

在服务中可以这样处理http请求的返回值。

从“@nestjs/axios”导入 { HttpService };
从'@nestjs/common'导入{可注射};
从'rxjs'导入{地图,可观察};
从'src/interfaces/project.interface'导入{项目};
从'axios'导入{AxiosResponse};

@Injectable()
导出类 ProjectsService {
构造函数(
私有只读httpService:HttpService
) {}
findAll(): Observable<项目[]> {
返回 this.httpService.get('http://localhost:3000/api-json').pipe(
地图((axiosResponse:AxiosResponse)=> {
返回 axiosResponse.data;
})
);
}
}

因为 axios 一线,用数据作为关键,map 的。管道图都是来自 rxjs。rxjs 的核心是可服务的,使用响应式编程的方式,就是需要和异步方式的因此这里你看不到promise或者await/async之类的关键字。

配置

上面的请求,我用了一个本地的json接口。 ,不能直接代码被git提交。

所以我需要加上config的配置,安装nest.js的config包,它的封装其实应该是dotenv包,使用nodejs的话,会很像这个包。

 npm i --save @nestjs/config

在app.module中引入config模块。

从“@nestjs/config”导入 { ConfigModule };
从'./config/configuration'导入配置;
...
进口:[
Http模块,
ConfigModule.forRoot({
加载:[配置],
})
],
...

这里使用该模块的示例模式的因为。而对于对象的参数load是可以把配置的。

引入的config/configuration文件是新创建的配置对象。

导出默认 () => ({
端口:parseInt(process.env.PORT, 10) || 3000,
运行:{
网址:process.env.RUNN_API_URL,
令牌:process.env.RUNN_API_TOKEN
}
});

我配置了端口,以及API的URL和Token。

然后可以生成Typescript的接口,使用nest文件。

嵌套 g 接口运行配置
导出接口 RunnConfig {
网址:字符串
令牌:字符串
}

在服务中就可以获取这些配置项。

从“@nestjs/config”导入 { ConfigService };
从 'src/interfaces/runn-config.interface' 导入 { RunnConfig };

...
构造函数(
私有只读 httpService: HttpService,
私有配置服务:ConfigService
) {}

...
const config = this.configService.get<RunnConfig>('runn');

不要忘记在根目录下创建.env文件进入配置的值。另外按习惯,可以创建.env.sample文件,只包含key,没有值,类似的模板,被git提交管理。而.env文件被gitignore 。只在本地保留。在服务器上需要另外生成一份。

添加标题

URL使用,但由于headers中添加。在app.module中使用HttpMoule的register就可以配置其中所以需要使用Axios的token。不过token已经配置了,方法比较解决的registerAsync,注入配置后,在useFactory中使用。

 ...
进口:[
HttpModule.registerAsync({
进口:[配置模块],
注入:[配置服务],
useFactory: (configService: ConfigService) => ({
标题:{
'内容类型':'应用程序/json',
授权:'Bearer' + configService.get('runn.token')
}
})
}),
...
],
...

这样我就创建了一个基本的API框架,并请求了一个简单的目标任务管理系统的API获取数据。

API文档

另外,由于客户需要了解和测试我们的API,所以需要一个postman的api集合。我准备使用Swagger,这是一个API的自动生成工具,它会根据框架中定义的API和参数,自动生成一个页面,包含所有的API和参数说明,以及可以请求该API。当然这需要直接物质器的辅助。先安装nestjs的swagger包。

 npm i --save @nestjs/swagger

然后在main.ts中引入并配置。


从“@nestjs/core”导入 { NestFactory };
从“@nestjs/swagger”导入 { SwaggerModule, DocumentBuilder };
从'./app.module'导入{AppModule};

异步函数 bootstrap() {
const app = await NestFactory.create(AppModule);

// 大摇大摆
const config = new DocumentBuilder()
.setTitle('我的 API')
.setDescription('我的 API 文档')
.setVersion('1.0')
。建造();
常量文档 = SwaggerModule.createDocument(app, config);
SwaggerModule.setup('api', app, document);
// 大摇大摆的结束

等待 app.listen(3000);
}
引导程序();

然后就可以通过http://localhost:3000/api访问该API文档页面。不过目前所有API教程不能使用默认标签下。官方示例中的addTag方法虽然可以添加一个标签,但并指定了一些API该标签。我需要通过物质器实现。

在控制器的方法上使用@ApiTags('Project')启用,该方法会被放置在项目标签下。

http://localhost:3000/api-json的 JSON 格式是最重要的,可以使用它在 Postman 中直接导入。

原文: https://blog.tychio.net/2022/08/15/nestjs/

本站文章系自动翻译,站长会周期检查,如果有不当内容,请点此留言,非常感谢。
  • Abhinav
  • Abigail Pain
  • Adam Fortuna
  • Alberto Gallego
  • Alex Wlchan
  • Answer.AI
  • Arne Bahlo
  • Ben Carlson
  • Ben Kuhn
  • Bert Hubert
  • Bits about Money
  • Brian Krebs
  • ByteByteGo
  • Chip Huyen
  • Chips and Cheese
  • Cool Infographics
  • Dan Sinker
  • David Walsh
  • Dmitry Dolzhenko
  • Elad Gil
  • Ellie Huxtable
  • Ethan Marcotte
  • Exponential View
  • FAIL Blog
  • Founder Weekly
  • Geoffrey Huntley
  • Geoffrey Litt
  • Greg Mankiw
  • Henrique Dias
  • Hypercritical
  • IEEE Spectrum
  • Investment Talk
  • Jaz
  • Jeff Geerling
  • Jonas Hietala
  • Josh Comeau
  • Lenny Rachitsky
  • Lou Plummer
  • Luke Wroblewski
  • Matt Stoller
  • Mert Bulan
  • Mostly metrics
  • News Letter
  • NextDraft
  • Non_Interactive
  • Not Boring
  • One Useful Thing
  • Phil Eaton
  • Product Market Fit
  • Readwise
  • ReedyBear
  • Robert Heaton
  • Ruben Schade
  • Sage Economics
  • Sam Altman
  • Sam Rose
  • selfh.st
  • Shtetl-Optimized
  • Simon schreibt
  • Slashdot
  • Small Good Things
  • Taylor Troesh
  • Telegram Blog
  • The Macro Compass
  • The Pomp Letter
  • thesephist
  • Thinking Deep & Wide
  • Tim Kellogg
  • 英文媒体
  • 英文推特
  • 英文独立博客
©2025 搞英语 → 看世界 | Design: Newspaperly WordPress Theme