±à¼ÍƼö: |
±¾ÎÄÀ´×ÔÓÚsegmentfault.com
,ÎÒÃÇ´ÓÀíÂÛÉÏÌÖÂÛÁËNestJS²¢×öÁËÒ»¸öʵ¼ÊµÄÀý×Ó¡£ ÓûÁ˽â¸ü¶àÐÅÏ¢£¬Çë²ÎÔÄ¿ò¼ÜµÄ¹Ù·½Îĵµ£¬ÆäÖаüº¬´óÁ¿ËæÊ±¿ÉÓõÄÖ¸µ¼ºÍ´úÂëÆ¬¶Î¡£ |
|
NestJS ÊÇÒ»¸ö¾«ÐÄÖÆ×÷µÄ·þÎñÆ÷¶Ë£¨ºó¶Ë£©Ó¦ÓóÌÐò¿ò¼Ü£¬ÒÔÖ§³Ö¿ª·¢ÈËÔ±µÄÉú²úÁ¦²¢ÈÃËûÃǵÄÉú»î¸ü¼Ó¿ìÀÖ¡£
ÄÇô£¬Ëü²»½öÊÇÒ»¸ö¿ò¼Ü£¬Ëü»¹ÊǽøÈëÁìÓòÇý¶¯Éè¼Æ£¬Ê¼þ²É¹º£¬Î¢·þÎñ¼Ü¹¹µÈÏȽø¹¤³Ì¸ÅÄîÁìÓòµÄÍÆ¶¯Õß¡£
ËùÓÐÈí¼þ°ü¶¼ÒÔ¼òµ¥ÇáÁ¿¼¶µÄÐÎʽ´ò°ü£¬ÒÔ±ãÄú¿ÉÒÔÑ¡Ôñ - ÎÞÂÛÄú¾ö¶¨Ê¹ÓÃÕû¸ö¿ò¼Ü»¹ÊǽöÖØÐÂʹÓÃÆä×é¼þ¡£
ÎÒÊÇÒ»¸ö PHP ±àдµÄ Symfony ¿ò¼ÜµÄ·ÛË¿¡£ ÔÚÎÒµÄÖ°ÒµÉúÑÄÖУ¬ÎÒ»¨Á˺ü¸ÄêµÄʱ¼ä¿ª·¢´óÐÍÓ¦ÓóÌÐò£¬Ëü²¢Ã»ÓÐÈÃÎÒʧÍû¡£
ËüдµÃºÜºÃ£¬×÷Ϊһ¸ö¿Í¹ÛµÄ£¬¾ßÓÐÁ¼ºÃÎĵµµÄÄ£¿é»¯ Web ¿ò¼Ü£¬ÌṩÁËÁ¼ºÃµÄ¿ª·¢ÕßÌåÑé¡£ ÓëÎÒÃèÊö
NestJS ÍêȫһÑù¡£
Node.js ºÍ°ü¹ÜÀíÆ÷ NPM ÌṩÁ˹¦ÄÜÈ«ÃæµÄ·þÎñÆ÷¶Ë»·¾³£¬Áé»îÐÔÇ¿£¬ÔËÐÐËٶȼ«¿ì£¬¶Ô¿ª·¢ÈËÔ±À´Ëµ¾ßÓо޴óµÄÁé»îÐÔ£¬´Ó¶ø½«¿ª·¢µ½Éú²úµÄʱ¼äËõ¶Ìµ½¼¸Ð¡Ê±£¬¶ø²»ÊǼ¸Ìì¡£

È»¶ø£¬¾¡¹Ü Node.js µÄÓŵãºÜ¶à£¬µ«Ëü²¢²»Äܽâ¾ö×î³£¼ûµÄÎÊÌ⣬ÔÚÎÒ¿´À´£¬ÕâÊÇ×î´óµÄÎÊÌ⣬ËùÓеÄ
NodeJS ÏÖ´ú¿ò¼ÜËÆºõ¶¼Ã»ÓÐÊܵ½Ñ¬ÌÕ - ¼Ü¹¹µÄÁé»îÐÔ¡£
ÓÐÈË¿ÉÄÜ»á˵ - Õâ²»ÊǾö¶¨ÏîÄ¿¼Ü¹¹µÄ¿ò¼ÜÎÊÌâ¡£ ÄÇô£¬ÎÒÍêȫͬÒâÕâÒ»µã£¬µ«ÊÇÎÒÃǼ¸ºõÔÚÿ¸öÏîÄ¿Öж¼»á¿´µ½Ò»Ð©ÖÚËùÖÜÖªµÄ¸ÅÄîºÍģʽ¡£
ÔÚÎÒ¿´À´£¬Èç¹ûÒ»¸ö¿ò¼Ü½«¿ª·¢ÈËÔ±ÍÆÏòÁËÁ¼ºÃµÄ¼Ü¹¹¾ö²ß£¬ÕâÊÇÒ»¼þºÃÊ¡£
NestJS µ½µ×ÊÇʲô£¿
¸ù¾Ý¸ÃÏîÄ¿µÄÍøÕ¾:
NEST Êǹ¹½¨¸ßЧ£¬¿ÉÀ©Õ¹µÄ NodeJS ·þÎñÆ÷¶ËÓ¦ÓóÌÐòµÄ¿ò¼Ü¡£
ÕâÓë Node.js ÓïÑÔÏàͬ£¬ËùÒÔÇø±ðÔÚÄÄÀ ÄÇô£¬ÖصãÊÇÔÚϸ½Ú£º
ËüʹÓÃÏÖ´úJavaScript£¬Ê¹ÓÃTypescript£¨±£ÁôÓë´¿ JavaScript µÄ¼æÈÝÐÔ£©¹¹½¨£¬²¢½áºÏÁËOOP£¬FP
ºÍ FRP µÄÔªËØ¡£
¾ÍÊÇÕâÑù¡£ Nest ¿ò¼ÜÒÔÒ»Öַdz£»îÔ¾µÄ·½Ê½¹ÄÀø¿ª·¢ÈËÔ±³¢ÊÔ£¬Ñ§Ï°ºÍʹÓÃÒ»Ð©ÖøÃûµÄÈí¼þ¹¤³Ì·¶Àý¡£Õâ²»½öÊǽéÉÜÐԵĿںÅ
- ÔÚÏîÄ¿ÎĵµÖÐÎÒÃÇÕÒµ½Á˺ܶàʾÀý£¬Ö¸µ¼ºÍ´úÂëÔ´£¬ÒÔ±ãÎÒÃÇ¿ÉÒÔÔÚ¼¸·ÖÖÓÄÚÔÚÏîÄ¿ÖÐʹÓÃËüÃÇ¡£
´ËÍ⣬ËùÓÐÕâЩдʻãµÄ NestJS ¸øÎÒÃDzο¼Ëü±³ºóµÄ֪ʶ¡£ ËùÒÔÈç¹ûÄã²»ÖªµÀһЩģʽ - ²»Óõ£ÐÄ£¬Ä㽫»á˳ÀûµØÍê³ÉÕû¸ö¹ý³Ì¡£
Ò»Ð©ÌØÐÔ
NestJS ÊÇÒ»¸öÍêÈ«Óà TypeScript ±àдµÄ¿ò¼Ü£¨ËüÒ²Ö§³Ö JS£©£¬ËüºÜÈÝÒײâÊÔ£¬²¢ÇÒ´øÀ´ÁËËùÓбØÒªµÄ¶«Î÷£¬Äã×ÜÊǵ«Äú²»ÖªµÀ¸Ãѡʲô¡£
ÒÀÀµ×¢ÈëÈÝÆ÷ - NestJS ´øÓÐ×Ô¼ºµÄDiC£¬ÕâÊÇÒ»¸öÔÚ JavaScript ÊÀ½çÖÐËÆºõ±»ÒÅÍüµÄʵÓù¤¾ß£¬µ«ÎÒÕæµÄ²»ÄÜûÓÐËü¡£
ÓÐһЩ½â¾ö·½°¸Ïñ Inversify »ò Bottle£¬µ« NestJS ÓÐ×Ô¼ºµÄ½â¾ö·½°¸¡£ ËüÒ²Ö§³Ö¹¤³§×¢Èë¡£
Ä£¿é»¯ - ÔÚNestJSÖУ¬´¦ÓÚÏàͬÓò±ß½çÄÚµÄÓ¦ÓóÌÐòµÄÿ¸öÂß¼²¿·Ö¶¼ÊÇÒ»¸öÄ£¿é£¬Ëü¹ÄÀø·â×°¡£
¿É²âÊÔÐÔ - ÓÉÓÚÒýÈëÁË DiC ºÍ Modularisation£¬Äú¿ÉÒÔ¸ù¾Ý·þÎñ¹¹½¨Ó¦ÓóÌÐò, ʹ¿ØÖÆÆ÷µÄ¹¤×÷¸üÈÝÒ×½øÐвâÊÔ¡£
ʹÓà TypeScriptÖÐ - ÀàÐͺܺᣠÄã¿ÉÒÔ¸øÒ»¸ö±äÁ¿·ÖÅäÀàÐÍ£¬¼õÉÙ¿ÉÄܳöÏֵĴíÎó¡£
ÈëÃÅ£º¹¹½¨Ò»¸ö¼òµ¥µÄÌìÆøÓ¦ÓóÌÐò
ÔÚÕâÆªÎÄÕÂÖУ¬ÎÒÃǽ«Ê¹Óà Nest ¿ò¼ÜºÍ OpenWeatherMap API ±àдһ¸ö¼òµ¥µÄÌìÆøÓ¦ÓóÌÐò¡£
×¼±¸ÏîÄ¿
Ê×ÏÈ£¬ÈÃÎÒÃÇÈ·±£ÄãÒѾ°²×°ÁËÖ§³ÖµÄ Node.js °æ±¾£º
ÐèÒª¸ßÓÚ 6.11.0 ¡£ Èç¹ûÄúûÓа²×°Node.js»ò°æ±¾²»ÕýÈ·£¬Çë°²×°»ò¸üС£
µÚ¶þ²½ÊÇ´Ó OpenWeatherMap ÍøÕ¾¼ìË÷APIÃÜÔ¿¡£ ΪÁËʵÏÖÎÒÃÇÐèҪע²áµÄ¹¦ÄÜ£¬³É¹¦×¢²áºó£¬ÎÒÃǽ«Äܹ»´Ó
APIÃÜÔ¿±êÇ©ÖмìË÷ÎÒÃǵÄAPIÃÜÔ¿ ¡£

×¼±¸¾ÍÐ÷ÁË¡£ ÈÃÎÒÃÇÀ´ÉèÖÃÕâ¸öÏîÄ¿¡£ Ϊ´Ë£¬ÎÒ½«Ê¹Óà Nest µÄ TypeScript ³õѧÕß´æ´¢¿â£¨»¹ÓÐÒ»ÖÖ·½·¨¿ÉÒÔ´ÓÍ·¿ªÊ¼¹¹½¨ÏîÄ¿£¬µ«ÎÒºÜÀÁ£©¡£
ËüÌṩÁËÁ¼ºÃµÄ³õѧÕßÌåÑ飬²¢ÓµÓпªÊ¼±àд´úÂëËùÐèµÄÒ»ÇС£
$ git clone
https://github.com/nestjs/typescript-starter.git
project
$ cd weather-app / |
°²×°ÒÀÀµ¹ØÏµ²¢Æô¶¯£º
µ±°²×°ÁËÏîÄ¿ÒÀÀµ¹ØÏµ²¢ÇÒÓ¦ÓóÌÐò³É¹¦Æô¶¯ºó£¬ÄúÓ¦¸ÃÔÚ¿ØÖÆÌ¨Öп´µ½ÒÔÏÂÊä³ö£¬²¢ÔÚä¯ÀÀÆ÷ÖÐÖ¸Ïò http://localhost:3000/
µÄurl£¬Ó¦¸Ã»á¸øÄúÈÈÇé¶ø»¶ÓµÄHello World£¡ Îı¾¡£
> nest-typescript-starter@1.0.0
start /Users/mat/Development/weather-app> node
index.js
[Nest] 31827 - 2018-1-13 11:39:32 [NestFactory]
Starting Nest application...
[Nest] 31827 - 2018-1-13 11:39:32 [InstanceLoader]
ApplicationModule dependencies initialized +7ms
[Nest] 31827 - 2018-1-13 11:39:32 [RoutesResolver]
AppController {/}: +34ms
[Nest] 31827 - 2018-1-13 11:39:32 [RouterExplorer]
Mapped {/, GET} route +2ms
[Nest] 31827 - 2018-1-13 11:39:32 [NestApplication]
Nest application successfully started +1ms |

°²×° HTTP ¿Í»§¶Ë
ÎÒÃÇÒѾ½¨Á¢ÁËÏîÄ¿£¬»ñÈ¡ÌìÆøÊý¾ÝµÄ APIÃÜÔ¿ºÍ¿ª·¢·þÎñÆ÷£¬ËæÊ±×¼±¸½»¸¶¡£
ÎÒÃÇÏÖÔÚ°²×°Ò»¸öHTTP¿Í»§¶Ë£¬ÔÚÕâ¸öÇøÓòÎҵĸöÈËÆ«ºÃÊÇ axios ¡£ ΪʲôѡÔñaxios£¿ ÕâÊÇÒ»¸ö»ùÓÚPromise
µÄ¿Í»§¶Ë£¬ËüÖ§³Ö·þÎñÆ÷¶ËºÍ¿Í»§¶Ë£¬²¢ÌṩÐí¶àÓÐÓõŦÄÜ£¬È磺¶ÔJSONת»»µÄ×Ô¶¯ÏìÓ¦ºÍרÓõŤ¾ß -
moxios--ʹ²âÊÔ±äµÃ˳³©ºÍÇáËÉ¡£
½¨Á¢µÚÒ»¸ö·þÎñ
ÏÖÔÚÎÒÃÇ¿ÉÒÔ¿ªÊ¼¹¹½¨ÎÒÃǵĵÚÒ»¸ö·þÎñ
ΪÁË×öµ½ÕâÒ»µã£¬ÈÃÎÒÃÇÔÚÎÒÃÇµÄ src/ Îļþ¼ÐÖд´½¨Ò»¸öÃûΪ weather.service.t
sµÄÎļþ£º
import { Component
} from '@nestjs/common';
import axios, { AxiosInstance } from 'axios';
@Component()
export class WeatherService {
private client: AxiosInstance;
constructor() {
this.client = axios.create({
baseURL: 'https://api.openweathermap.org/data/2.5/',
params: {
APPID: 'CHANGE_ME'
}
});
}
async ofCity(city: string): object {
const response = await this.client.get('weather',
{
params: { q: city }
});
return response.data;
}
} |
ÎÒÃÇÕýÔÚ´´½¨Ò»¸ö·â×° HTTP ¿Í»§¶ËµÄÀ࣬ÒÔʵÏÖʵ¼ÊµÄ API µ÷ÓᣠÓÐÒ»µãÐèҪעÒâµÄÊÇÀà×°ÊÎÆ÷
@Component()£¬¶à¿÷ÁËËü£¬¿ò¼Ü²Å»áÖªµÀÕâÊÇÎÒÃÇÏëÒªÔÚ DiC ÖÐ×¢²áµÄ×é¼þ¡£ ËüÓÐÒ»ÖÖ·½·¨£¬ÕâÊÇÒì²½µÄ
- Ëü»á·µ»ØÒ»¸öPromise - ·µ»Øµ½¿ØÖÆÆ÷½«ÓÉ Nest ´¦Àí¡£
HTTPͨÐŲã
½ÓÏÂÀ´ÎÒÃÇÐèÒª½¨Á¢µÄÊÇ¿ØÖÆÆ÷¡£ ÔÚsrc /Îļþ¼ÐÖд´½¨Ò»¸öÃûΪ weather.controller.ts
µÄÎļþ£º
import { Get,
Controller } from '@nestjs/common';
import { WeatherService } from './weather.service';
@Controller('weather')
export class WeatherController {
constructor(private readonly weatherService:
WeatherService) {}
@Get()
async root(): Promise< object > {
const response = await this.weatherService.forCity('New
York');
return response;
} |
×°ÊÎÆ÷ @Controller£¨'weather'£©¸æËß¿ò¼ÜÎÒÃÇÆÚÍûÕâ¸ö¿ØÖÆÆ÷ÔÚ / weather
·ÓÉÉÏ×÷³öÏìÓ¦¡£
È»ºó£¬ÎÒÃÇÔÚÀ๹Ô캯ÊýÖÐ×¢ÈëÁËÎÒÃÇµÄ WeatherService £¬²¢½«ÆäÉèÖÃΪÃûΪweatherService
µÄ˽ÓÐÊôÐÔ¡£
×îºóÊÇÒ»¸ö³ÆÎª root µÄÒì²½²Ù×÷£¬Ëü·µ»ØÒ»¸öPromise£¬×îÖÕ½âÎöΪһ¸ö¶ÔÏó¡£ ËüÄÚ²¿µ÷ÓÃÎÒÃǵÄ
weatherService ²¢»ñµÃŦԼµÄʵ¼ÊÌìÆøÔ¤±¨¡£
Á¬½Óµã
ΪÁËʹÎÒÃǵÄÓ¦ÓóÌÐòÕý³£¹¤×÷£¬ÎÒÃÇÐèÒª×öµÄ×îºóÒ»¼þÊÂÊǽ«Ó¦ÓóÌÐòÄ£¿éÖеÄËùÓв¿·ÖÁ¬½ÓÔÚÒ»Æð£º
import { Module
} from '@nestjs/common';
import { AppController } from './app.controller';
import { WeatherController } from './weather.controller';
import { WeatherService } from './weather.service';
@Module({
imports: [],
controllers: [AppController, WeatherController],
components: [WeatherService],
})export class ApplicationModule {} |
±£´æÎļþ£¬ÖØÆôÄãµÄ¿ª·¢·þÎñÆ÷£¬µ±ÄãÔÚä¯ÀÀÆ÷Öе¼º½µ½url http://127.0.0.1:3000/weather
ʱ£¬Äã»á¿´µ½ÌìÆø·þÎñµÄÏìÓ¦¡£
ÉÏÃæµÄ´úÂëÊÇΪÁËÏÔʾÎÒÃÇÈçºÎ¿ìËÙµØÔÚ NestJS Öй¹½¨Ò»¸öºÃµÄ¶«Î÷¡£È»¶ø, ÎÒ¿´µ½Ò»Ð©¸Ä½ø, Õ⻹ûÓÐ×ö,
ÒòΪÎÒÏë±£³Ö¼òµ¥:
·µ»ØÀàÐ͵Ľӿڡ£ ÎÒÃÇ¿ÉÒÔ³ä·ÖÀûÓà TypeScript ºÍÇ¿ÀàÐÍËùÓеĶ«Î÷
´íÎó´¦Àí¡£ µ± promise ²»ÊÇ resolve ʱ£¬ÎÒÃǵĿØÖÆÆ÷ºÜ¿ÉÄÜ»áÖжÏ
²âÊÔÌ×¼þ¡£ ÎÒÃÇ»¹Ã»ÓÐдÈκβâÊÔ
ÎÒÃÇÒª·µ»ØÕû¸öÊý¾Ý blob¡£ÎÒÃÇÖ»ÄÜÈ¥µôÎÒÃǹØÐĵÄÖµ
¸ÅÒª
Node.js ÊÇΪÁËÀ©Õ¹ºÍʵÏÖÊµÊ±ÍøÂçÓ¦ÓóÌÐòµÄ¸ßЧ¿ª·¢¶ø´´½¨µÄ£¬Ëü·Ç³£ºÃ¡£
ÏÖÔÚÎÒÃÇÒѾÓÐÁË NestJS ¿ò¼ÜÀ´½â¾ö¼Ü¹¹ÎÊÌâ¡£ |