用TypeScript構(gòu)建企業(yè)級應(yīng)用
TypeScript:始于JavaScript,歸于JavaScript。
TypeScript從今天數(shù)以百萬計的JavaScript開發(fā)者所熟悉的語法和語義開始。使用現(xiàn)有的JavaScript代碼,包括流行的JavaScript庫,并從JavaScript代碼中調(diào)用TypeScript代碼。
TypeScript可以編譯出純凈、 簡潔的JavaScript代碼,并且可以運行在任何瀏覽器上、Node.js環(huán)境中和任何支持ECMAScript 3(或更高版本)的JavaScript引擎中。
來自 TypeScript 官方介紹
在很多前端團隊,已經(jīng)使用了 JavaScript 的情況下,期待引入一個企業(yè)級后端應(yīng)用,以前我們的選擇是基于 Node.js 的一些 Web 框架,比如 Django。今天跟大家分享另外一個可供選擇的選項,基于 Node.js & TypeScript 的企業(yè)級應(yīng)用框架 NestJS。
為什么使用 TypesScript ,核心原因是 TypeScript 是 JavaScript 的一個超集,對于已經(jīng)熟悉 JavaScript 的同學(xué)來說,上手門檻不會太高,這樣也可以讓前端同學(xué)在有意愿的情況下,接觸到后端的應(yīng)用,今天主要聊聊怎么用 NestJS 構(gòu)建企業(yè)級應(yīng)用,也順便描述一下前端同學(xué)在寫后端應(yīng)用一些比較核心的誤區(qū)。
首先我假設(shè)你已經(jīng)安裝好了 Node.JS 和 NPM ,NestJS 的安裝步驟只有一個。
- npm i -g @nestjs/cli
- nest new aric-nest
這樣NestJS 就會給我們創(chuàng)建好了一個名為 aric-nest 的項目,讓我們看一眼項目結(jié)構(gòu)。
我們最主要的文件一個是 src ,我們所有的源代碼都會放在這里。第二個就是 package.json 項目打包&依賴管理文件了,我們所有的打包腳本以及依賴管理都會在這里完成,這個文件一般不需要自己改動。
跟所有 Node.js 項目一樣,我們的入口是 main.js,可以看出,main.js 的邏輯非常簡單,就是創(chuàng)建一個新的 App,然后用 3000 端口啟動它。
代碼實例
- import { Bind, Body, Controller, Get, Param, Post } from '@nestjs/common';
- import { AppService } from './app.service';
- class RequestDTO{}
- class ResponseDTO{}
- @Controller()
- export class AppController {
- constructor(private readonly appService: AppService) {}
- @Get()
- getHello(): string {
- return this.appService.getHello();
- }
- @Get("/find/me/:id")
- @Bind(Param())
- findMe(params): string {
- return this.appService.findMe(params.id);
- }
- @Post('/PostMe')
- async PostMe(@Body() requestDTO: RequestDTO): Promise<ResponseDTO>{
- const responseDTO = new ResponseDTO();
- return responseDTO;
- }
- }
這里給了一個 Get 例子,一個 restful 接口的例子,還有一個基于JSON 的 Post的例子。 可以看到 TypeScript 是支持依賴注入解釋器的(Java 里面叫注解)。具體的操作大家自行進行操作即可。
如何使用數(shù)據(jù)庫和緩存?
既然說到企業(yè)級應(yīng)用,最經(jīng)典的后端存儲系統(tǒng)不外乎關(guān)系型數(shù)據(jù)庫和緩存,這是我們不可避免的部分。在 TypeScript 里,我們可以使用 TypeORM 進行數(shù)據(jù)庫操作,使用 ioredis 進行 Redis 操作。
如何使用定時任務(wù)?
定時任務(wù)也是一個非常常見的內(nèi)容,直接使用 @nestjs/schedule 即可。
如何對外發(fā)送 http 請求?
直接使用 Axios 即可,是一個非常靠譜的 http 模塊。
如何進行限流?
express-rate-limit 實現(xiàn)了一個全局頻率流控,至于如何進行接口級別,IP 級別,分布式限流,我估計還得自己實現(xiàn)一個比較靠譜,目前沒有看到非常好的實現(xiàn)。
作為入門,先寫到這里,先消化消化,就醬。