Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
NestJS£ºÎÒÃÇÒ»Ö±ÔڵȴýµÄ¾«ÃÀµÄ Node.js ¿ò¼Ü
 
  6073  次浏览      27
  2018-3-29 
 
±à¼­ÍƼö:
±¾ÎÄÀ´×ÔÓÚ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 °æ±¾£º

node -v

ÐèÒª¸ßÓÚ 6.11.0 ¡£ Èç¹ûÄúûÓа²×°Node.js»ò°æ±¾²»ÕýÈ·£¬Çë°²×°»ò¸üС£

µÚ¶þ²½ÊÇ´Ó OpenWeatherMap ÍøÕ¾¼ìË÷APIÃÜÔ¿¡£ ΪÁËʵÏÖÎÒÃÇÐèҪע²áµÄ¹¦ÄÜ£¬³É¹¦×¢²áºó£¬ÎÒÃǽ«Äܹ»´Ó APIÃÜÔ¿±êÇ©ÖмìË÷ÎÒÃǵÄAPIÃÜÔ¿ ¡£

×¼±¸¾ÍÐ÷ÁË¡£ ÈÃÎÒÃÇÀ´ÉèÖÃÕâ¸öÏîÄ¿¡£ Ϊ´Ë£¬ÎÒ½«Ê¹Óà Nest µÄ TypeScript ³õѧÕß´æ´¢¿â£¨»¹ÓÐÒ»ÖÖ·½·¨¿ÉÒÔ´ÓÍ·¿ªÊ¼¹¹½¨ÏîÄ¿£¬µ«ÎÒºÜÀÁ£©¡£ ËüÌṩÁËÁ¼ºÃµÄ³õѧÕßÌåÑ飬²¢ÓµÓпªÊ¼±àд´úÂëËùÐèµÄÒ»ÇС£

$ git clone https://github.com/nestjs/typescript-starter.git project
$ cd weather-app /

°²×°ÒÀÀµ¹ØÏµ²¢Æô¶¯£º

$ npm i
$ npm run start

µ±°²×°ÁËÏîÄ¿ÒÀÀµ¹ØÏµ²¢ÇÒÓ¦ÓóÌÐò³É¹¦Æô¶¯ºó£¬ÄúÓ¦¸ÃÔÚ¿ØÖÆÌ¨Öп´µ½ÒÔÏÂÊä³ö£¬²¢ÔÚä¯ÀÀÆ÷ÖÐÖ¸Ïò 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--ʹ²âÊÔ±äµÃ˳³©ºÍÇáËÉ¡£

$ npm i --save axios

½¨Á¢µÚÒ»¸ö·þÎñ

ÏÖÔÚÎÒÃÇ¿ÉÒÔ¿ªÊ¼¹¹½¨ÎÒÃǵĵÚÒ»¸ö·þÎñ

ΪÁË×öµ½ÕâÒ»µã£¬ÈÃÎÒÃÇÔÚÎÒÃÇµÄ 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 ¿ò¼ÜÀ´½â¾ö¼Ü¹¹ÎÊÌâ¡£

   
6073 ´Îä¯ÀÀ       27
Ïà¹ØÎÄÕÂ

Éî¶È½âÎö£ºÇåÀíÀôúÂë
ÈçºÎ±àд³öÓµ±§±ä»¯µÄ´úÂë
ÖØ¹¹-ʹ´úÂë¸ü¼ò½àÓÅÃÀ
ÍŶÓÏîÄ¿¿ª·¢"±àÂë¹æ·¶"ϵÁÐÎÄÕÂ
Ïà¹ØÎĵµ

ÖØ¹¹-¸ÄÉÆ¼ÈÓдúÂëµÄÉè¼Æ
Èí¼þÖØ¹¹v2
´úÂëÕû½àÖ®µÀ
¸ßÖÊÁ¿±à³Ì¹æ·¶
Ïà¹Ø¿Î³Ì

»ùÓÚHTML5¿Í»§¶Ë¡¢Web¶ËµÄÓ¦Óÿª·¢
HTML 5+CSS ¿ª·¢
ǶÈëʽC¸ßÖÊÁ¿±à³Ì
C++¸ß¼¶±à³Ì