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

1Ôª 10Ôª 50Ôª





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



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
»ùÓÚReactµÄPCÍøÕ¾Ç°¶Ë¼Ü¹¹·ÖÎö
 
  3140  次浏览      31
 2018-12-29 
 
±à¼­ÍƼö:
±¾ÎÄÀ´×Ôjuejin.im£¬ ±¾ÎĽ²½âÁËǰ¶ËÍøÕ¾¼Ü¹¹µÄÒ»µã·ÖÎöºÍÀí½â,Ï£Íû±¾ÎĶԴó¼ÒÓаïÖú¡£

Ðò

×ʼ½Ó´¥Ç°¶ËµÄʱºò£¬ÊÇ´Ó¼òµ¥µÄhtml¡¢css¡¢js¿ªÊ¼µÄ£¬µ±Ê±Ê¢ÐеÄWEBÀíÄîÊǽṹÑùʽÐÐΪÏà·ÖÀ룬¼´html¡¢css¡¢js·ÖÀ룬¶ÀÁ¢¿ª·¢£¬»¥ÏàÖ®¼äͨ¹ýlinkºÍscriptÀ´»¥Ïàµ÷Óá£

×ʼÎÒËù½Ó´¥µ½µÄСÏîÄ¿£¬¶¼ÊÇÖ±½Ó½«html¡¢css¡¢jsµÈ¾²Ì¬×ÊÔ´Ö±½Ó²¿Êðµ½·þÎñÆ÷ÉÏ£¬È»ºó¸ù¾ÝÇëÇó·ÓÉÏìÓ¦²»Í¬µÄhtmlÎļþ¼´¿É¡£

¼´Ê¹Ñ§Ï°ÁËwebpackÖ®ºó£¬ÎÒÒÀÈ»ÈÏΪwebpackµÄ×÷ÓÃÖ»ÊÇѹËõjsºÍcssÎļþ£¬Ìá¸ß·þÎñÆ÷ÏìÓ¦ËÙ¶È£¬ÓÅ»¯Óû§ÌåÑ飬¶ø²¿Êðµ½·þÎñÆ÷ÉϵÄÒÀÈ»ÊÇѹËõºóµÄmin.cssºÍmin.jsÎļþ¡£

ºóÀ´½øÈëA¹«Ë¾ÊµÏ°Ö®ºó£¬È·ÊµÒ²ÊÇÕâÖÖ¿ª·¢Ä£Ê½£¬µ±Ê±ÎÒÃÇ¿ª·¢h5Ò³Ãæ£¬¶¼ÊÇÖ±½ÓÊéдhtml¡¢css¡¢jsÎļþ£¬È»ºó²¿Êðµ½·þÎñÆ÷ÉÏ£¬Ö±½Ó·ÃÎÊhtml¼´¿É¡£

ºóÀ´½øÈëB¹«Ë¾¹¤×÷Ö®ºó£¬²ÅÂýÂý½Ó´¥µ½ÕæÕýµÄǰ¶Ë¹¤³ÌÊÇʲôÑù×ӵġ£

ǰºó¶Ë·ÖÀë

²¿·Ö´«Í³´óÐÍPCÍøÕ¾µÄÒµÎñǰ¶Ë²¿·Ö¶¼ÊDzÉÓõÄMVC¼Ü¹¹·½Ê½£¬Ò²¾ÍÊÇÿ´ÎÁ¢ÏîÖ®ºó£¬Ç°ºó¶ËÔ¼¶¨ºÃ½Ó¿Ú£¬·Ö±ð¿ª·¢£¬¿ª·¢Íê±ÏÖ®ºó£¬Ç°¶Ë½«¿ª·¢ºÃµÄÒ³Ãæ½»¸øºó¶Ë£¨Ò»°ãÊÇJava»òÕßPHP£©£¬È»ºóÓɺó¶ËÏìÓ¦¿Í»§¶ËÇëÇ󣬷µ»Ø¾ßÌåµÄhtmlÒ³Ãæ¡£

ÕâÖÖ¿ª·¢Ä£Ê½µÄȱµãÔÚÓÚ·Ñʱ·ÑÁ¦£¬¹µÍ¨³É±¾ºÍÁªµ÷Õý±¾·Ç³£¸ß£¬Ç°¶ËÓÐÒ»µãСµÄ¸Ä¶¯¶¼ÐèҪǰºó¶ËÒ»ÆðÁªµ÷¸Ä¶¯ÉÏÏߣ¬´ó´óÔö¼ÓÁË×ܹ¤×÷Á¿¡£

Òò´Ë£¬ÏÖ´ú´óÐÍPCÍøÕ¾Ò»°ã¶¼²ÉÓÃÁËǰºó¶Ë·ÖÀëµÄ¼Ü¹¹·½Ê½£¬Ç°¶ËºÍºó¶ËµÄÒµÎñ¹¦Äܸ÷×ÔÊÕÁ²£¬¿ÉÒԷֱ𿪷¢ÉÏÏߣ¬»¥²»Ó°Ï죬¿ÉÒÔ¼«´óÌá¸ß¹¤×÷ЧÂÊ¡£

ǰºó¶Ë·ÖÀëÒ»°ã·ÖΪÁ½ÖÖ£º

ûÓÐÖмä²ãµÄǰºó¶Ë·ÖÀ룻

ÓÐÖмä²ãµÄǰºó¶Ë·ÖÀë¡£

ÕâÀïÒÔĿǰ×î»ðµÄÈý´ó¿ò¼ÜÖ®Ò»µÄreactΪÖ÷½øÐнéÉÜ¡£

ÎÞÖмä²ã

ûÓÐwebÖмä²ãµÄǰºó¶Ë·ÖÀëÊôÓڱȽϼòµ¥µÄÀàÐÍ£¬ÎÒÃǽ«Ò»¸öͳһµÄhtml/pugÄ£°åºÍÆäËûµÄcss¡¢jsµÈ¾²Ì¬×ÊÔ´·ÅÖõ½cdnÉÏ£¬Ã¿´Î·ÃÎÊÒ³ÃæµÄʱºò£¬Ö±½Ó½«Ä£°å·µ»Ø¸øÓû§£¬È»ºóÀïÃæËùÓеÄdom½ÚµãºÍÆäËûÊý¾Ý¶¼ÊÇÓÉjsÀ´Ö´ÐÐÉú³ÉµÄ¡£

È»¶øÕâÖÖûÓÐÖмä²ãµÄǰºó¶Ë·ÖÀëµÄÓÖÓкܶàÁÓÊÆ£º

ÊׯÁäÖȾʱ¼ä¹ý³¤£»

¶Ôseo²»ÓѺá£

ÓÐÖмä²ã

ÓÐÖмä²ãµÄǰºó¶Ë·ÖÀëÊÇÒ»°ã´óÐÍÏîÄ¿²ÉÓõÄǰºó¶Ë·ÖÀ뷽ʽ¡£

×Ô´Ó2009Äênodeºá¿Õ³öÊÀÖ®ºó£¬Ç°¶ËÒ²Ö𽥳е£ÁËһЩºó¶ËµÄÒµÎñ£¬µ«ÊÇnodeÓÉÓÚ×ÔÉí½¡×³ÐÔµÄÏÞÖÆ£¬ÓÖ²»ÊʺÏ×÷Ϊ´óÐÍÏîÄ¿µÄºó¶Ë·þÎñÆ÷£¬ËùÒÔnodeÈȹýÒ»ÕóÖ®ºó£¬Öð½¥³ÉΪÁËÁ¬½Ó´«Í³Ç°¶ËºÍºó¶ËµÄÖмä²ã£¬ÎÒÃÇÒ²³ÆÕâÖÖǰ¶Ë+nodeµÄ¼Ü¹¹Îª¡°´óǰ¶Ë¡±¡£

·µ»ØÄ£°å

ÔÚnode²ãÖУ¬ÎÒÃÇ¿ÉÒÔ×öµÄÊÂÇé¾ÍÓкܶàÁË£¬ÆäÖÐ×î»ù´¡µÄ¾ÍÊÇ·µ»Ø²»Í¬µÄǰ¶ËÄ£°å¡£

ʹÓùý¼¸¿îǰ¶ËÄ£°å£¬ÆäÖиøÎҸоõ×îºÃµÄ¾ÍÊÇpugÄ£°åÁË(ÒÔǰ½Ð×öjade)¡£

pugÖеÄÓï·¨¶¼ÊÇjsÓï·¨£¬¶Ôǰ¶Ë¹¤³Ìʦʮ·ÖÓѺ㬶øÇÒpug¹¦ÄܺÜÇ¿´ó£¬¿ÉÒÔ×÷Ϊhtml-middleware£¬±»nodeÍêÃÀÖ§³Ö£¬ÕâÀィÒéѧϰʹÓà Get Started¡£

Êý¾ÝÆ´½Ó

Æä´Î£¬µ±ÍøÕ¾·¢Õ¹µØÔ½À´Ô½´ó£¬Êý¾ÝÁ¿Ô½À´Ô½¶à£¬¶Ô·þÎñ²ã½øÐзָîµÄʱºò£¬»á²úÉúºÜ¶àµÄ·þÎñÄ£¿é£¬»òÕßÎÒÃǵÄÊý¾Ý·ÖÉ¢ÔÚ²»Í¬µÄÊý¾Ý¿â·þÎñÆ÷ÉϵÄʱºò£¬»òÕßÎÒÃǵÄǰ¶ËÒ³ÃæÖÐҪǶÈëµÚÈý·½¹ã¸æµÄһЩapiµÄʱºò£¬node¾Í¿ÉÒÔ°ïÎÒÃÇÍê³ÉÊý¾ÝÆ´½ÓµÄ¹¤×÷¡£

ÒòΪ·þÎñÆ÷·ÃÎʽӿڵÄËÙ¶ÈÒª±Èä¯ÀÀÆ÷¿ìºÜ¶à¸öÊýÁ¿¼¶£¬Òò´ËÔÚnodeÖзÃÎʶà¸ö½Ó¿Ú²¢ÇÒÆ´½ÓÆðÀ´ÊǷdz£¸ßЧµÄ£¬Æ´½ÓºóµÄÊý¾ÝÎÒÃǾͿÉÒÔÖ±½Ó´«ÈëÄ£°åÖУ¬¹©jsʹÓÃÁË¡£

µ«ÊÇͨ³£ÒâÒåÉÏÀ´Ëµ£¬·ÃÎÊ»ù´¡·þÎñ»òÕß´ÓÊý¾Ý·þÎñÆ÷·ÃÎÊÊý¾Ý·ÅÔÚºó¶ËÀ´×ö±È½ÏºÏÊÊ£¬µ«·²ÊÂ×ÜÓÐÀýÍ⣬ÔÚÍò²»µÃÒѵÄÇé¿öÏ£¬ÎÒÃÇ¿ÉÒÔÔÚnodeÖмä²ãÖнøÐÐÊý¾ÝÆ´½Ó¡£

ÕâÖÖģʽһ°ã²»ÌᳫʹÓã¬ÒòΪ¿Éά»¤ÐÔÌ«²î£¬¶øÇÒ°²È«ÐÔÒ²ºÜµÍ£¬Ò»°ãÇé¿ö϶¼ÊǺó¶ËÓÐÒ»¸öרÃŵÄÊý¾ÝÄ£¿éÈ¥·ÃÎÊÊý¾Ý¿âºÍ·þÎñ£¬È»ºó½«Êý¾ÝÆ´½ÓÆðÀ´£¬ÎÒÃÇÖ»ÐèÒªÔÚnodeÖе÷Óúó¶ËµÄÒ»¸öAPI£¬¾Í¿ÉÒÔÄõ½ÎÒÃÇÏëÒªµÄÊý¾ÝÁË¡£

¼à¿Ø·þÎñ

node²ã¿ÉÒÔ²¶×½Ò»Ð©Òì³£ÇëÇó»òÕßʼþ£¬Éϱ¨µ½ÎÒÃǵĵÚÈý·½¼à¿ØÆ½Ì¨,ÈçSentryµÈ£¬Í¬Ê±node»¹¿ÉÒԳе£Ò»²¿·ÖµÄÊý¾Ýͳ¼ÆµÄ¹¤×÷£¬½«Ò»Ð©Óû§Ó¦Îª´òµ½µÚÈý·½Êý¾Ýͳ¼ÆÆ½Ì¨£¬¹©pmºÍÊý¾Ý·ÖÎöʦ²é¿´¡£

node»¹¿ÉÒԳе£¶ÔÕû¸öʵÀý½øÐÐ¼à¿ØµÄÖ°Ô𣬵±³öÏÖÒì³£µ¼ÖÂcpuʹÓÃÂÊ»òÕßÄÚ´æÊ¹ÓÃÂʳ¬¹ýãÐÖµÖ®ºó¾Í¿ÉÒÔ¼°Ê±´¥·¢±¨¾¯»úÖÆ¡£

µ«ÊÇͬÑù£¬¼ÓÉÏnode²ã¾ÍÒâζÕâÍøÕ¾ÓÖ¶àÁËÒ»²ãºó¶ËÐèÒª¼à¿ØºÍoncall£¬¹¤×÷µÄ¸´ÔÓ¶È»áÉÏÉýºÜ¶à¡£

·þÎñÆ÷¶ËäÖȾ

SSR(server-side-render)¿ÉÒÔ˵ÊǷdz£ÖØÒªµÄ¹¦ÄÜÖ®Ò»ÁË£¬Ëü¿ÉÒÔ°ïÖúÎÒÃǽâ¾ö֮ǰÌáµ½µÄÊׯÁäÖȾʱ¼ä¹ý³¤ºÍ¶ÔseoÖ§³Ö½ÏµÍµÄÎÊÌâ¡£

ÏÖ´úseoÅÀ³æÒ»°ã·ÖΪÁ½ÖÖ£º

Ö§³Ö½âÎöjsµÄÅÀ³æ£¬ÕâÀàÊýÁ¿½ÏÉÙ£¬ÒÔGoogleΪ´ú±í£»

²»Ö§³Ö½âÎöjsµÄÅÀ³æ£¬´ó²¿·Ö¶¼ÊÇÕâÀ࣬»ù±¾É϶¼ÊÇ·ÇGoogleµÄËÑË÷ÒýÇæµÄÅÀ³æÁË¡£

¶ÔÓÚGoogleµÄÅÀ³æÀ´Ëµ£¬ÊÇ·ñʹÓÃSSRÔÚseo·½ÃæÎ޹ؽôÒª£¬ÒòΪ×îÖÕ¶¼¿ÉÒÔÅÀÈ¡µ½Õý³£µÄÒ³Ãæ¡£

¶ø¶ÔÓÚ·ÇGoogleµÄËÑË÷ÒýÇæÀ´Ëµ£¬ÎÒÃǾÍÐèÒªÀûÓÃSSR£¬ÏȽ«¾ßÌåµÄdom½ÚµãäÖȾ³öÀ´£¬¹©ÅÀ³æÅÀÈ¡¡£

¶øÇÒÕâÑùͬʱ»¹ÓÐÒ»¸öÓŵ㣺Óû§ÔÚÍøÒ³loadingµÄ¹ý³Ì¾ÍÖпÉÒÔ¿´µ½Ò³ÃæÄÚÈÝÁË£¬¶ø²»ÊÇÒ»¸ö¿Õ°×Ò³Ãæ¡£Èç¹û²»Ê¹ÓÃSSRµÄ»°£¬ÔÚÍøÒ³loading×ÊÔ´µÄ¹ý³ÌÖУ¬Ò»Ö±³ÊÏÖ¸øÓû§Ò»Æ¬¿Õ°×£¬Õâ¾ÍÓпÉÄÜÔì³ÉÓû§µÄÁ÷ʧ¡£

ÕâÕÅͼÊÇÎÒÔÚ50kb/sµÄÍøËÙÏ£¬·ÃÎÊbÕ¾µÚÒ»ÃëÖÓ¿´µ½µÄÄÚÈÝ£¬ÈôÊÇbÕ¾²»Ê¹ÓÃSSR¼¼ÊõµÄ»°£¬¿ÉÄܵȵ½Óû§Äܹ»¿´µ½ÊׯÁÄÚÈÝÖ®ºó£¬Ê±¼ä¶¼¹ýÈ¥ÁËÎåÁùÃë¡£

ÕâÀïÊÇÒ»¸ö¼òµ¥µÄʹÓÃSSRµÄNode²ã´úÂ룺

// ´úÂëÖÐʹÓÃÁËes6Óï·¨£¬²»¶®µÄ¿ÉÒÔÏÈѧϰһÏÂÈîÒ»·åÀÏʦµÄ¡¶ES6ÈëÃÅ¡·
// Õâ¸öµØ·½nodeÈç¹ûûÓÐʹÓÃbabelµÄ»°£¬import»á±¨´í£¬¿ÉÒÔÖ±½ÓʹÓÃrequire·½·¨Ìæ»»
import { renderToString } from 'react-dom/server';
import DemoContainer from 'containers/demo';
// ÒÔkoa2¿ò¼ÜΪÀý
module.exports = (ctx) => {
const props = {...};
// ÕâÀïµÄhtml¾Í´æ·Å×ÅÎÒÃÇ×é¼þrenderÍêÖ®ºóµÄdom½Úµã¡£
const html = renderToString(<Demo >);
// ÕâÀïÒÔ·µ»ØpugÄ£°åΪÀý£¬µÚ¶þ¸ö²ÎÊýÊÇÒª´«ÈëpugÄ£°åÖеÄÊý¾Ý
ctx.render('demo.pug', {
__props: JSON.stringify(props)£¬
html
});
};

 

ÕâÀïÊÇpugµÄ´úÂëÆ¬¶Î£º

// pug´úÂëÆ¬¶Î
body
#root
!{ html }
script.
window.__props = '!{ __props }'

 

¸´ÖÆ´úÂëʹÓÃSSRµÄʱºòÒªÇмDZ£Ö¤Ç°¶ËºÍ·þÎñÆ÷¶ËµÄ×é¼þprops±£³ÖÒ»Ö£¬Òò´ËÕâÀïÎÒµÄϰ¹ßÊÇÔÚnode²ã½«propsÖ±½Ó´«Èëwindow¶ÔÏóÉÏ£¬È»ºóǰ¶ËµÄ×é¼þÖ±½Ó´Ówindow¶ÔÏó»ñÈ¡props¼´¿É¡£

SSRµÄʱºò£¬React×é¼þÖ»»áÖ´ÐÐcomponentWillMountºÍrenderÁ½¸öÉúÃüÖÜÆÚÓÃÀ´Éú³Édom½á¹¹£¬ÆäËûµÄÉúÃüÖÜÆÚÒÔ¼°·½·¨¹ÒÔØ¶¼ÊÇÔÚǰ¶ËÍê³ÉµÄ¡£

node²ãµÄ¹¦Äܲ»Ö¹ÒÔÉÏÕâЩ£¬ÕâÀï¾Í²»¹ý¶àÕ¹¿ª½éÉÜÁË¡£

ËäÈ»SSRµÄÓеãºÜ¶à£¬µ«ÊÇ»¹ÊÇÓÐ×ÔÉíµÄ±×¶ËµÄ¡£Ê¹ÓÃSSR¾ÍÒâζ×ÅÄãÓÃ×Ô¼º·þÎñÆ÷´úÌæÁËÒ»²¿·ÖÔ­±¾ÊôÓÚÓû§¿Í»§¶ËµÄ¹¦ÄÜ£¬Òò´Ë»áÔì³É·þÎñÆ÷ÐÔÄܽµµÍ£¬³É±¾Ôö¸ßµÄ¿ÉÄÜ£¬Ïà¶ÔÓÚСÍŶӻòÕß×ʽð²»Ëã³äÔ£µÄÍŶӣ¬Òª½÷É÷Ñ¡ÔñÊÇ·ñʹÓÃSSR¡£

ǰºó¶Ëͬ¹¹

˵ÆðSSR£¬¾Í²»µÃ²»ÌáÒ»ÏÂǰºó¶Ëͬ¹¹ÎÊÌâ¡£

ͬ¹¹µÄÒâ˼Ϊǰ¶ËºÍnodeÓÃÖ´ÐÐͬһÌ×´úÂ룬ÊׯÁʹÓ÷þÎñ¶ËäÖȾ£¬½«äÖȾºÃµÄhtmlÖ±½Ó½»¸øä¯ÀÀÆ÷È¥äÖȾ£¬¿Í»§¶Ë¸ºÔð¼ÓÔØjs£¬Ö´ÐÐ×é¼þÊ£ÓàÉúÃüÖÜÆÚ£¬²¢¹ÒÔØ×Ô¶¨ÒåʼþµÈ¡£

Ò»Ì׺õÄǰºó¶Ëͬ¹¹´úÂë¿ÉÒÔ´ó·ù¼õÉÙÎÒÃÇά»¤´úÂëµÄ¹¤×÷Á¿£¬²¢ÇÒÓÐÊ®·Ö¸ßЧµÄÖ´ÐÐЧÂÊ£¬ÈçºÎÓÅÑŵØÊéдǰºó¶Ëͬ¹¹µÄ´úÂëÒ²ÊÇÒ»Ïî¼¼Êõ»î£¬ÐèÒªÎÒÃÇÌáǰ¹æ»®ºÃÒ»Ì×ǰ¶Ë¼Ü¹¹¡£

ÀýÈ磺
import React, { Component } from "react";
import { Provider } from "react-redux";
import ReactDOM from "react-dom";
import Loadable from "react-loadable";
import { BrowserRouter, StaticRouter } from "react-router-dom";
// server side render
const SSR = App =>
class SSR extends Component<{
store: any;
url: string;
}> {
render() {
const context = {};
return (
<Provider store={this.props.store} context={context}>
<StaticRouter location={this.props.url}>
<App />
</StaticRouter>
</Provider>
);
}
};
// client side render
const CLIENT = configureState => Component => {
const initStates = window.__INIT_STATES__;
const store = configureState(initStates);
Loadable.preloadReady().then(() => {
ReactDOM.hydrate(
<Provider store={store}>
<BrowserRouter>
<Component />
</BrowserRouter>
</Provider>,
document.getElementById("root")
);
});
};
export default function entry(configureState) {
return IS_NODE ? SSR : CLIENT(configureState);
}

 

²¢ÇÒÔÚͬ¹¹·½Ã棬°¢ÀïÓÐÒ»Ì×½µ¼¶²ßÂÔ¡£µ±·þÎñÆ÷ѹÁ¦Õý³£Ê±£¬ÓÉ·þÎñÆ÷½øÐÐSSR£¬Ìá¸ßÓû§ÌåÑ飬µ±Óû§·ÃÎÊÁ¿¼¤Ôö£¬Èç˫ʮһʱ£¬·þÎñÆ÷»á×Ô¶¯½øÐнµ¼¶´¦Àí£¬node²»½øÐÐSSR£¬È«²¿×ª»»³É¿Í»§¶ËäÖȾ£¬¼õÇá·þÎñÆ÷µÄѹÁ¦¡£

Ñ¡Ôñ¿ò¼Ü

Á˽âÁËǰºó¶Ë·ÖÀëÖ®ºó£¬ÎÒÃǾÍÒª¶Ônode²ã½øÐпò¼ÜÑ¡ÔñÁË¡£

Ŀǰ±È½ÏÖ÷Á÷µÄ¿ò¼ÜÓÐÈý¿î£ºExpress¡¢koa1.0¡¢koa2.0¡£

¶ÔÓÚ³õѧÕßÀ´Ëµ£¬½¨ÒéÖ±½ÓʹÓÃkoa2.0½øÐÐÖмä²ãµÄѧϰºÍ¿ª·¢¡£

expressµÄȱµãÔÚÓÚ£ºÌ«ÖØ£¬ÓкܶàÄ£¿éÎÒÃÇ¿ÉÄܶ¼²»»áÓõ½£»

»Øµ÷µØÓü£¬¼´Ê¹Ê¹ÓÃPromiseÒ²Ö»ÄÜ»º½â¡£

koa1.0µÄȱµãÔÚÓÚ£º±ØÐëÅäºÏco¿âºÍgeneratorÀ´Ê¹Óã¬ÅäÖ÷±Ëö¡£

¶ø×Ô´ÓnodeÉý¼¶µ½7.6°æ±¾ÒÔÉÏ£¬Ôö¼ÓÁËasync/awaitÓï·¨ÌÇÖ®ºó£¬ÎÒÃǾͿÉÒÔ²»ÐèÒªÈκÎÈý·½¿â£¬Ö±½ÓÔÚÔ­ÉúnodeÖÐʹÓÃkoa2µÄÓï·¨¡£koa2ÊÇexpressµÄÉý¼¶°æ¿ò¼Ü£¬ÀïÃæºÜ¶àÄ£¿éÊÇÖ±½Ó´ÓexpressÖÐÇ¨ÒÆ¹ýÀ´µÄ£¬µ«ÊÇÓÖ½«ÒÔǰ²»¾­³£Óõ½µÄÄ£¿éɾ³ý£¬Ö»Óпª·¢ÕßÔÚÐèҪʹÓõÄʱºò²ÉÈ¡ÒýÈëÄÇôģ¿é¡£

²¢ÇÒkoa2ʹÓÃasync/awaitÓï·¨ÌÇÖ®ºó£¬´úÂë¿´ËÆ±ä³ÉÁËͬ²½Ö´ÐУ¬·Ç³£ÊʺÏǰ¶Ë¹¤³ÌʦµÄÂß¼­Ë¼Î¬¡£

ÕâÀïÊÇexpress¡¢promise¡¢koa2µÄÑùÀý´úÂ룺

// express°æ±¾
module.exports = (req, res) => {
const data1 = request.get('/api/demo1', (err, res) => {
const data2 = request.get('/api/demo2', (err, res) => {
const data3 = request.get('/api/demo3', (err, res) => {
res.send(data1 + data2 + data3);
})
})
})
}
// promise°æ±¾
module.exports = (req, res) => {
new Promise((resolve, reject) => {
request.get('/api/demo1', (err, res) => {
resolve(res);
}).then(res => {
request.get('/api/demo2', (err, res2) => res + res2 );
}).then(res2 => {
request.get('/api/demo3', (err, res3) => res2 + res3)
}).then((data) => {
res.send(data);
});
})
}

¿´ÆðÀ´ËäÈ»ÕûÆëÁËһЩ£¬µ«ÊÇÒÀȻʮ·Ö·±Ëö¡£

// koa1ºÍkoa2ÔÚд·¨ÉÏ»ù±¾Ïàͬ£¬Çø±ðÔÚÓÚkoa1ÔÚʹÓÃ֮ǰҪ¶Ôco¿âºÍgenerator½øÐз±ËöµÄÅäÖá£
// ÿһ¸öawaitµÄʱºò×îºÃ¼ÓÉÏtry-catch£¬·ÀÖ¹ÒòΪһ¸öÒì²½ÇëÇóʧ°Ü¶øµ¼ÖÂnode½ø³Ì±ÀÀ££¬ÕâÀï¼ò»¯ÁËд·¨¡£
module.exports = async (ctx) => {
const data1 = await request.get('/api/demo1');
const data2 = await request.get('/api/demo2');
const data3 = await request.get('api/demo3');
ctx.body = {
data: data1 + data2 + data3
};
}

 

koa2ÓÃÆðÀ´·Ç³£µÄÊæ·þ£¬ºÜÊʺÏǰ¶Ë¹¤³ÌʦµÄ˼άÂß¼­¡£

ËäÈ»koa2µÄ´úÂë¿´ÆðÀ´Ïñͬ²½Ö´ÐУ¬µ«ÆäʵÔÚ±àÒëÖ®ºóÖ»ÊDZä³ÉÁËpromiseº¯Êý£¬awaitºóÃæËùÓеĴúÂë¶¼·Åµ½ÁËpromiseµÄ»Øµ÷ÖÐÖ´ÐÐÁË¡£

¿ª·¢½á¹¹

Ñ¡ÔñºÃÁË¿ò¼ÜÖ®ºó£¬Ê£ÏµľÍÖ»Óпª·¢ÁË£¬Ò»°ãµÄnode²ã¶¼×ñѭһϵÄĿ¼½á¹¹:

node

lib // ´æ·ÅµÚÈý·½²å¼þ

util // ´æ·Å×Ô¼º±àдµÄ¹¤¾ßº¯Êý

middleware // ´æ·ÅÖмä¼þ

routes // ´æ·Å·ÓÉ

controller // ´æ·Å·ÓÉ´¦Àíº¯Êý

app.js // node²ãÈë¿ÚÎļþ

»ù±¾µÄnode²ã¼Ü¹¹ÕâÀï¾Í½éÉܲ¶àÁË£¬Ê£ÏµÄǰ¶Ë²¿·ÖÒ²Ò»°ãÊÇ´ó¼ÒÊìϤµÄ¶«Î÷¡£

ǰ¶ËĿ¼½á¹¹:

public

static

src

js

components

containers

routes

stores

actions

reducers

pages

css/scss/less

static

ÕâÀï°´ÕÕÕý³£µÄReact¿ª·¢Âß¼­È¥×ß¼´¿É¡£

×îºó»¹ÓÐһЩÆäËûµÄÎļþ¼Ð¿ÉÒÔ×ÔÓÉ·¢»Ó£¬±ÈÈçtemplate´æ·ÅÄ£°å£¬scripts´æ·ÅƽʱдµÄ½Å±¾µÈ¡£

ÅäÖÃ

Ò»¸öÏßÉÏÏîĿҪӵÓÐÁ½Ì×ģʽ¡ª¡ªÉú²úģʽºÍ¿ª·¢Ä£Ê½¡£

Éú²úģʽ¼´ÎÒÃÇÏßÉÏÔËÐл·¾³¡£

¿ª·¢Ä£Ê½¼´ÎÒÃÇÆ½Ê±±¾µØ¿ª·¢»·¾³¡£

Èç¹ûÓÐÐèÒªµÄ»°ÉõÖÁ¿ÉÒÔÅäÖøü¶àµÄ»·¾³¡£

ÕâÁ½ÖÖ»·¾³µÄÒªÇó²»Ò»Ñù£¬Òò´ËÎÒÃÇ»áÓÐÁ½Ì×ÅäÖÃÎļþ£¬½«²»Í¬µÄÅäÖÃÎļþ´«ÈënodeºÍwebpackÖУ¬¾Í¿ÉÒÔ¸ù¾ÝÅäÖõIJ»Í¬Æô¶¯²»Í¬»·¾³ÁË¡£

×Ô¶¯»¯²âÊÔ

×Ô¶¯»¯²âÊÔÔÚÒ»¸ö³ÉÊìµÄ´óÐÍÍøÕ¾Öбز»¿ÉÉÙ¡£

ËäȻĿǰÒòΪǰ¶ËÁìÓòµÄ¿ìËÙÔö³¤£¬ÒµÎñ²ãµÄ×Ô¶¯»¯²âÊÔÒ²ÒòΪҵÎñµÄ¿ìËÙµü´ú¶ø±äµÃ²»Îȶ¨£¬µ«ÊÇһЩ»ù´¡µÄ²âÊÔ»¹ÊǺÜÓбØÒª×öµÄ¡£

ƽʱ¿ª·¢µÄʱºòÒª×öºÃÀà¿âµ¥Ôª²âÊÔµÄ×Ô¶¯»¯ÒÔ¼°UI×é¼þµÄµ¥Ôª²âÊÔµÄ×Ô¶¯»¯¡£

ÕâЩ²âÊÔÎļþ×îºÃ´æ·ÅÔÚµ¥¶ÀµÄtestĿ¼Ï£¬»òÕßÔÚÿһ¸ö»ù´¡UI×é¼þĿ¼Ï¼ÓÉÏcomponent.test.jsÎļþ£¬ÕâÑùÆô¶¯²âÊÔµÄʱºò»á×Ô¶¯ÕÒµ½.testÎļþ½øÐвâÊÔ¡£

ÿ´ÎÏîÄ¿ÉÏÏß֮ǰ¶¼Òª½øÐÐÒ»´Î¼¯³É²âÊÔ£¬²âÊÔ·ÓÉÊÇ·ñÕý³££¬webpack´ò°üºÍnodeÄ£¿é°²×°ÊÇ·ñÕý³££¬Ä£ÄâÓû§µÇ¼·ÃÎʵȲÙ×÷ÊÇ·ñÕý³£¡£

ż¶ûÎÒÃÇ»¹ÐèÒª×öѹÁ¦²âÊÔºÍÈÝÔÖ²âÊԵȡ£

¶ÔÓÚ³õѧÕßÀ´Ëµ£¬²âÊÔÊÇÒ»¸öºÜÖØÒªµÄ¸ÅÄîºÍϰ¹ß£¬Æ½Ê±Òª¶àдһдµ¥Ôª²âÊÔ¡£

   
3140 ´Îä¯ÀÀ       31
Ïà¹ØÎÄÕÂ

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

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

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