JavaScriptã§ãã«ã¹ã¿ãã¯ãæ§ç¯ããïŒãµãŒããŒ

ãã«ã¹ã¿ãã¯JSéçºã«é¢ããã·ãªãŒãºã®2çªç®ã®èšäºã
JavaScriptã¯çµ¶ããå€åããŠããŸãã6ãæåã®ãã¹ããã©ã¯ãã£ã¹ã¯æ代é ãã§ãããããææ°ã®ãã¯ãããžãŒã«å¯Ÿå¿ããã®ã¯éåžžã«å°é£ã§ãã ãã®ãããªã¹ããŒãã¡ã³ãã¯å€ãã®ç¹ã§çå®ã§ãããããã¯ã¯ã©ã€ã¢ã³ãåŽã®JavaScriptã«ããåœãŠã¯ãŸãããšã«æ³šæããŠãã ããã ãµãŒããŒã®å Žåããã¹ãŠãã¯ããã«å®å®ããŠåŸ¹åºããŠããŸãã
- èšäº1ïŒåºæ¬
- èšäº2ïŒãµãŒããŒ
- èšäº3ïŒã¯ã©ã€ã¢ã³ã
ãã®èšäºã¯ã Contoso Expressãããžã§ã¯ãã®ã³ãŒãã«åºã¥ããŠããŸãã
ãã®èšäºã®ããã€ãã®ãããã¯ã詳ããç¥ãããšãã§ãããªãœãŒã¹ã®ãªã¹ãã
JSã®ç
JavaScriptã¯ãã®çã§ç¥ãããŠããŸãã ããšãã°ãæåãª0.1 + 0.2ã¯0.3ã«çãããããŸãããããã¯ãJavaScriptã«ã¯10é²æ°åãçµã¿èŸŒãŸããŠããªãããã§ãã
console.log(0.1 + 0.2 === 0.3); //false
ãŸãã¯ãå€æ°ã®å€ãæååã§ããããšãæ£ãã確èªããã«ã¯ã次ã®æ§æãå¿ èŠã§ãã
if (typeof myVar === 'string' || myVar instanceof String) { console.log('That is string!'); }
ãããã®åé¡ã®äžéšã¯ã ES6ããŒãžã§ã³ã®èšèªã§ä¿®æ£ãããŠããŸãã ããšãã°ã varãä»ããŠå®£èšãããå€æ°ã®ã¹ã³ãŒãã¯é¢æ°å šäœã§ãïŒä»ã®ã»ãšãã©ã®èšèªã§ã¯ãå€æ°ã«ã¯ãããã¯ã¹ã³ãŒãããããŸãïŒã ES6ã§ã¯ããã®åé¡ã¯let / constãä»ããŠå€æ°ã宣èšããããšã§è§£æ±ºããã varã®äœ¿çšã¯ãŸã£ããæšå¥šãããŠããŸããã ãã ããäžäœäºææ§ã®ããã«JSã«ã¯ïŒæ°žä¹ ã«ïŒæ®ããŸãã
ãµãŒãããŒãã£ã®ã©ã€ãã©ãªã¯ãJSèšèªã®ä»ã®æ¬ é¥ã«å¯ŸåŠããããã«äœ¿çšãããŸãã ããšãã°ãæ£ç¢ºãª10é²æ°ã®èšç®ã«ã¯ããbig.jsãã䜿çšã§ããŸãã å€ãã®å°ããªããã±ãŒãžãããããããããåæ§ã®åé¡ã解決ããŠããŸãããååãèŠããŠãããžã§ã¯ãã«æ¥ç¶ããã®ã¯éåžžã«å°é£ã§ãã ãããã£ãŠã ãlodashããªã©ã®æ±çšãœãªã¥ãŒã·ã§ã³ã䜿çšãããšãè¿œå ã®ãŠãŒãã£ãªãã£æ©èœã®ã»ããå šäœãäžåºŠã«æäŸããæ¹ã䟿å©ã§ãã
lodashã®Webãµã€ãã«ã¯åªããããã¥ã¡ã³ããšäŸããããŸãããã¹ãŠãäžåºŠã«èŠãå¿ èŠã¯ãããŸãããããã«ç¥ããå¿ èŠãªãã®ã ããå°æ¥çã«èŠãããšãã§ããŸãã
ããšãã°ãå€æ°ã«æååå€ãããããšã確èªããã®ã¯ãlodashã䜿çšãããšç°¡åã§ãã
if (_.isString(myVar)) { console.log('That is string!'); }
lodashã¯ãé¢æ°ãã§ãŒã³ã®åŒã³åºãããµããŒãããŠããããšã«æ³šæããŠãã ãããããšãã°ïŒ
let arr = [2, 3, 1, 5, 88, 7, 13]; let oddSquares = _(arr) .filter(x => x % 2 === 1) //filter odd numbers .sort((a,b) => a > b) //sort by default sorts lexicographically: [1, 13, 3, 7] .map(x => x*x); console.log(oddSquares.join(',')); //1,9,25,49,169
ãµãŒããŒäžã®TypeScript
JSã³ãŒããè€éã«ãªãã»ã©ãTypeScriptã䜿çšããã¡ãªãããå¢ããŸãã è€éãªãµãŒããŒåŽã³ãŒãã®å ŽåãTSã®å©ç¹ã¯ããã«æããã«ãªããŸãã
Contosoã§ã¯ããµãŒããŒã®TSã³ã³ãã€ã«èšå®ã¯tsconfig.jsonãã¡ã€ã«ã«ãããŸãã
以äžã®ç¹ã«æ³šæããŠãã ããã
rootDir / outDir ïŒ rootDirã®ãã¹ãŠã®ã³ãŒãïŒãã¹ãŠã®TSãã¡ã€ã«ïŒã¯ãoutputDirã§JSãã¡ã€ã«ã«ã³ã³ãã€ã«ãããŸããããã©ã«ããŒæ§é ã¯ä¿æãããŸãã ããšãã°ããã¡ã€ã«ã/server/helpers/emailHelper.tsãã¯ã/build/server/helpers/emailHelper.jsãã«ã³ã³ãã€ã«ãããŸã
sourceMap ïŒãã®ãã©ã°ãèšå®ãããŠããå ŽåãJSã«å ããŠããœãŒã¹ããããã¡ã€ã«ãäœæãããŸãïŒmyModule.ts-> myModule.js + myModule.js.mapïŒã ããã«ãããTSãã¡ã€ã«ããããã°ã§ãããã¬ãŒã¯ãã€ã³ããèšå®ãããŠtsãã¡ã€ã«ã§æ©èœããJSã³ãŒããå®éã«å®è¡ãããŸãã
- target ïŒTSã䜿çšãããšãJSã®ããŸããŸãªããŒãžã§ã³ã®ã³ãŒããã³ã³ãã€ã«ã§ããŸãã ãã ããES6ã®ææ°ããŒãžã§ã³ã«ã³ã³ãã€ã«ããå Žåã«ã®ã¿ãµããŒããããæ©èœãããã€ããããŸãã ãããã®1ã€ã¯async / awaitã§ããããã«ã€ããŠã¯ä»¥äžã§èª¬æããŸãã ãµãŒããŒã§äœ¿çšããããã«ãã³ãŒãã¯ES6ã§ã³ã³ãã€ã«ããã6xããŒãžã§ã³ã®Nodeã䜿çšãããŸãã
TypeScriptãã°ããŒãã«ã«ã€ã³ã¹ããŒã«ããŠããå Žåã¯ããããžã§ã¯ãã«ãŒãããtscïŒTypeScript CompilerïŒã³ã³ãœãŒã«ã³ãã³ãã䜿çšããŠããªãã·ã§ã³ã§watchãã©ã¡ãŒã¿ãŒã䜿çšããŠãããžã§ã¯ããã³ã³ãã€ã«ã§ããŸãã ç£èŠã¢ãŒãã§ã¯ããœãŒã¹ã³ãŒãã®å€æŽåŸãåã³ã³ãã€ã«ãå®è¡ãããŸã
tsc --watch
ã¢ããªã±ãŒã·ã§ã³ãèµ·åããã«ã¯ããããŒããä»ããŠããbuild / server / startServer.jsããå®è¡ããå¿ èŠããããŸãã
TSã䜿çšããããªãå Žåã¯ãTSã³ãŒããJSã«ç°¡åã«å€æã§ããŸãã äž»ãªããšïŒ
- ES6ã€ã³ããŒããããŒãã«å€æããå¿ èŠããããŸã
- å泚éãåé€ãã
- asyn / awaitã®ä»£ããã«promiseã䜿çšãããã翻蚳ã®ããã«babelãæ¥ç¶ããŸã
JSã®éåæ
JSã§ã®éåæïŒéåæïŒããã°ã©ãã³ã°ã¯ãä»ã®ããã°ã©ãã³ã°èšèªããåãæ¿ãããšãã«æãé£ããç¬éã®1ã€ã§ãã ç§ã¯éåžžã«ç°¡åãªæŠèŠã瀺ããŸããããªãã¯ãªãœãŒã¹ã®ãªã¹ãã§ãã£ãšèªãããšãã§ããŸãã
ããŒãã®ããã©ãŒãã³ã¹ãé«ãã®ã¯ãé·æéå®è¡ããããã¹ãŠã®æäœãã¡ã€ã³ããã»ã¹ããããã¯ããªãããã§ãã ãã®ãããªæäœã®äŸãšããŠã¯ãããŒã¿ããŒã¹ã§ã®ã¯ãšãªããã¡ã€ã«ãžã®æ å ±ã®æžã蟌ã¿ããããŸãã æäœãåŒã³åºãããåŸãå¥ã®ã³ãŒãã®å®è¡ãç¶ç¶ãããŸãã æäœãïŒå°æ¥ïŒæ£åžžã«å®äºããå ŽåããŸãã¯äœããã®ãšã©ãŒã§å®äºããå Žåã次ã«äœãããããæå®ããå¿ èŠããããŸãã
è€æ°ã®ãã³ãã¬ãŒãã䜿çšããŠãéåæã³ãŒããæäœã§ããŸãã ãããã®ãã¿ãŒã³ã¯ãNodeã®éçºãšãšãã«å€åïŒé²åïŒããŸããã
ã³ãŒã«ããã¯ã¯ãNodeã§éåæãæŽçããåŸæ¥ã®æ¹æ³ã§ãã ç解ã¯ç°¡åã§ãããããã€ãã®åé¡ããããŸããè€æ°ã®ãã¹ããããéåæåŒã³åºããè¡ãããšã¯å°é£ã§ãã ãã®å Žåãã³ãŒãã®èšè¿°ãä¿å®ãããã³ç解ãå°é£ã«ãªããŸãïŒã³ãŒã«ããã¯å°çïŒã ããŒã¿ã®æ»ãããšã©ãŒåŠçãçæã¯ãåæJSã³ãŒãã§ãããçºçããæ¹æ³ãšã¯æ ¹æ¬çã«ç°ãªããŸãã
PromisesïŒçŽæ/çŽæïŒ-JSã§ã®éåæã®ææ°ã®æšæºã çŸåšãåºã䜿çšãããŠããŸãã Promisã¯ãä¿çäž/æåŠ/解決æžã¿ã®3ã€ã®ç¶æ ã®ããããã«ãªããŸãã æåã¯ãæåŸ ã®ç¶æ ã§ãããå°æ¥çã«ã¯ãçŽæã¯ããšã©ãŒãŸãã¯å®è¡ã®æåïŒçµæã䌎ãïŒã®æçµç¶æ ã®ããããã«ç§»è¡ããããšãçŽæïŒçŽæïŒããŸãã Promiseã³ã³ã¹ãã©ã¯ãã䜿çšãããšãéåæåŒã³åºããã§ãŒã³ãããç·åœ¢ã«æŽçã§ããããããµããŒãã容æã«ãªããã³ãŒãã®ç解ãåäžããŸãã ãã®å ŽåãããŒã¿ã¯returnçµç±ã§è¿ããããšã©ãŒã¯throwçµç±ã§çæããã1ã€ã®ãšã©ãŒãã³ãã©ãŒãè€æ°ã®éåææäœã«äœ¿çšã§ããŸãã
- async / awaitã¯ãJSã§ã®éåæã®æªæ¥ã§ãã çŸåšãstage4ã®è°è«ã®æçµæ®µéã«ããããã®åŸãJSã«æ°ãã«æ¿èªãããè¿œå ãšãªããŸãã Async / awiatã¯ãåæã³ãŒããšéåæã³ãŒãã®éã®ç·ãããã«æ¶å»ãããããã調åããŠãã¬ã³ããããããã«ããŸãã async / awaitã䜿çšããã³ãŒãã¯ãèšè¿°ããã³ä¿å®ãå¯èœãªéãç°¡åã§ãã CïŒãPythonãªã©ãä»ã®èšèªã«ãåæ§ã®æ§æããããŸãã async / awaitã®çæã¯ãTypeScriptãBabelãªã©ãè¿œå ã®ããŒã«ã䜿çšããå¿ èŠãããããšã§ãã
ããã«ããã€ãã®éåæãã³ãã¬ãŒããéåæã¢ãžã¥ãŒã«ããžã§ãã¬ãŒã¿ãŒã䜿çšããcoã¢ãžã¥ãŒã«ããããŸãã ãããã¯ãpromisesããã³async / awaitã®åã®äžéçãªé²å段éã§ãã çŸåšããcoãã¯è¿œå ã®å€æãªãã§äœ¿çšã§ããŸãããç§ã®æèŠã§ã¯ãasync / awaitã䜿çšã§ããªãå Žåã¯promiseã䜿çšããããšããå§ãããŸãã
JSã§æ£åžžã«åäœããã«ã¯ãåºæ¬çãªéåæãã³ãã¬ãŒããç¥ã£ãŠããå¿ èŠããããŸãã æã ããããã®ããããã«å¯ŸåŠããå¿ èŠããããŸãã ããšãã°ãasync / awaitã䜿çšããå ŽåãPromise.allãä»ãã䞊åå®è¡ãªã©ã®äžéšã®æäœã«ã€ããŠã¯ãPromiseãå¿ èŠã§ããPromiseã䜿çšããå Žåã¯ãPromiseã§ã³ãŒã«ããã¯ã®é¢æ°ãã©ããããå¿ èŠãããå ŽåããããŸãã
ãšã©ãŒåŠç
ããã¯ãä»ã®ãã©ãããã©ãŒã ããNodeãžã®ç§»è¡ãå°é£ã«ããå¥ã®é åã§ãã ãŸãããšã©ãŒãåŠçããæ¹æ³ã¯ã䜿çšããéåæãã¿ãŒã³ã«ãã£ãŠç°ãªããŸãã ã³ãŒã«ããã¯ã䜿çšããå Žåããšã©ãŒã¯ã³ãŒã«ããã¯é¢æ°ã®æåã®ãã©ã¡ãŒã¿ãŒãšããŠéä¿¡ãããŸããPromiseã䜿çšããå Žåã¯ãPromiseãã§ãŒã³å ã®catchãä»ããŠãšã©ãŒãåŠçããå¿ èŠããããŸããã³ãŒããåæçã«åŒã³åºãå Žåãasync / awaitã䜿çšããå Žåã¯ãtry / catchã䜿çšããå¿ èŠããããŸã
次ã«ãJavaScriptã§ã¯ããªããžã§ã¯ããæž¡ãããšã§ïŒã¹ããŒãä»ããŠïŒãšã©ãŒãçæã§ããããšãç¥ã£ãŠããå¿ èŠããããŸããããã¹ããã©ã¯ãã£ã¹ã¯çµã¿èŸŒã¿ã®Errorãªããžã§ã¯ãã䜿çšããããšã§ãã æãåçŽãªåœ¢åŒã§ã¯ã次ã®ããã«ãªããŸãã
throw new Error('Param value is wrong');
ãã®å Žåãçµã¿èŸŒã¿ã®ãšã©ãŒãªããžã§ã¯ãããç¶æ¿ããããšã«ãããã«ã¹ã¿ã ãšã©ãŒãªããžã§ã¯ããäœæã§ããŸãã
function AppError(errorCode, options) { this.code = errorCode; Error.captureStackTrace(this, this.constructor); //merge data props into error object return Object.assign(this, options); } Object.setPrototypeOf(AppError.prototype, Error.prototype); ... throw new AppError('user_not_found', {userId: 5});
Error.captureStackTraceåŒã³åºãã«æ³šæããŠãã ãããããã¯ãã¹ã¿ãã¯ãã¬ãŒã¹ããšã©ãŒãªããžã§ã¯ãã«æ£ããè¿œå ããããã«å¿ èŠã§ãã ããŒã¿ããšã©ãŒã«è¿œå ãããšã©ãŒã³ã³ã¹ãã©ã¯ã¿ãŒã®çœ²åãå®çŸ©ã§ããŸãã
Contosoã§ã¯ ãAppErrorãªããžã§ã¯ãã¯æ¢å®ã§æååãã©ã¡ãŒã¿ãŒãåãå ¥ããŸãããšã©ãŒã®çš®é¡ãšãšã©ãŒã³ãŒãããšã©ãŒããã¹ãã¯å€éšãã¡ã€ã«ã®ã³ãŒãã«ãã£ãŠèªã¿åãããŸãã
å¥ã®ãã€ã³ãïŒæªåŠçãšã©ãŒããã£ããããŠãã°ã«èšé²ããå¿ èŠããããŸãããããè¡ããªããšãã¢ããªã±ãŒã·ã§ã³ã¯çç±ãæ確ã«ç€ºãããšãªãã·ã£ããããŠã³ããŸããæªåŠçãšã©ãŒã®ãã³ãã©ãŒãã§ããã ãæ©ãæ¥ç¶ããå¿ èŠããããŸãã
process.on('uncaughtException', (err) => { console.log(`Uncaught exception. ${err}`); });
ããã¯ãšã³ãWebãã¬ãŒã ã¯ãŒã¯ã®éžæ
Expressãäž»ãªéžæè¢ã§ããããã¹ãŠã®éžæè¢ã¯10å人æ°ããããŸãã Expressã¯ãããããªãºã ãšæè»æ§ã®å²åŠã«åŸããŸãã ãã®ã³ã³ããã¹ãã§ã®ããããªãºã ãšã¯ãè¿œå ã®æ§æãè¡ããªããšã䜿çšã§ããæ©èœãã»ãšãã©ãªãããšãæå³ããŸãã ããšãã°ãCookieã®ãµããŒããè¿œå ããHTTPèŠæ±ã®æ¬æã解æããã¯ã©ã€ã¢ã³ãã®ã»ãã·ã§ã³ã«ã¢ã¯ã»ã¹ããã«ã¯ãé©åãªã¢ãžã¥ãŒã«ãè¿œå ããå¿ èŠããããŸãã 䜿çšãããåæ©äŒã¯çŽæ¥ã¢ã¯ãã£ãåããå¿ èŠããããŸãã æè»æ§ãšã¯ãæ¢åã®æ©èœãå€æŽ/è¿œå ããå€ãã®å¯èœæ§ãããããšãæå³ããŸãã
Expressã®ãããã®æ©èœã«ãããWebã¢ããªã±ãŒã·ã§ã³ãšåã ã®APIãµãŒããŒã®äž¡æ¹ã«æé©ãªéžæè¢ãšãªããŸãã
ä»ã®ãªãã·ã§ã³ã¯ãå®å šã«ç¬ç«ãããã¬ãŒã ã¯ãŒã¯ãšExpressããŒã¹ã®ãã¬ãŒã ã¯ãŒã¯ã®2ã€ã®ã¿ã€ãã«åé¡ã§ããŸãã
å¥ã«ïŒ
Koaã¯ãExpressã®äœæè ã«ããæ°ãããã¬ãŒã ã¯ãŒã¯ã§ãã äžæ¹ã§ãããã¯Expressã®æ¹è¯çã§ãããããã€ãã®ç¹ãåªããŠããŸããä»æ¹ã§ã¯ãåºæ¬çã«ã¯åãã§ãããExpressãšã®äžäœäºææ§ã¯ãããŸããã
Hapiã¯å®å šã«ç¬ç«ãããã¬ãŒã ã¯ãŒã¯ã§ãå ã ã¯ç±³åœæ倧ã®ã¹ãŒããŒããŒã±ãããã§ãŒã³ã§ããWallmartã«ãã£ãŠäœæããã財æ¿çã«ãµããŒããããŠããŸãã Expressãšã¯ç°ãªããå¿ èŠãªã«ã¹ã¿ãã€ãºã¯å°ãªããããã«äœ¿çšã§ããæ©èœãå¢ããŸãã
- Meteor-ãµãŒããŒéšåãšã¯ã©ã€ã¢ã³ãéšåã®äž¡æ¹ãéçºããæ©äŒãæäŸããéçºè ã«å¿ èŠãªãã¹ãŠãäžåºŠã«æäŸããããšããããããµãŒãããŒãã£ã®ãã¯ãããžãŒãšçµ±åããã®ã¯ããå°é£ã§ãã
Expressã«åºã¥ãïŒ
ã«ãŒãããã¯-APIãµãŒããŒãç¹ã«ã¢ãã€ã«ããã€ã¹åãã«äœæããããã¬ãŒã ã¯ãŒã¯ãiOS/ Androidçšã®DSKããããçµã¿èŸŒã¿ORMãããŸããŸãªããŒã¿ããŒã¹ã®æäœã«äœ¿çšãããŸãã
Sails-ç¹ã«socket.ioãä»ãããªã¢ã«ã¿ã€ã ã®çžäºäœçšãããå ŽåããµãŒããŒAPIã®åªããåºç€ãšããŠäœçœ®ä»ããããŸãã
- FeathersJs-ãã®ãã¬ãŒã ã¯ãŒã¯ã«ã¯ä»ã®ããã±ãŒãž/ãã¬ãŒã ã¯ãŒã¯çšã®å€ãã®ã¢ããã¿ãŒããããç®æšã¯æšæºåãè¿œå ããéçºããã»ã¹ã容æã«ããããšã§ãã
äœãéžã¶ã
Expressããå§ããŸããæéãšåžæãããå Žåã¯ãä»ã®ãªãã·ã§ã³ãåç §ããŠãã ããã å人çã«ãç§ã¯ä»ã®ãã¬ãŒã ã¯ãŒã¯ã«å¯ŸåŠããããã®ååãªåæ©ãæã£ãŠããŸããã§ããããªããªããç§ã¯å®å šã«èªåã«åã£ãExpressããŒã¹ã®æ§é ãè¿ éã«æ§ç¯ã§ããããã§ãã ãã®ã¢ãããŒãã®å©ç¹ã¯ãæåã¯ããå€ãã®äœæ¥ãå¿ èŠã§ããããã¬ãŒã ã¯ãŒã¯ã®è©³çŽ°ãžã®äŸåãå°ãªãããšã§ãã
ãããžã§ã¯ãæ§é
Contosoãããžã§ã¯ãã®æ§é ã¯ãMVCã¢ãŒããã¯ãã£ã«åºã¥ããŠããŸã ã
ã³ã³ãããŒã©ãŒ -ã«ãŒããã³ãã©ãŒãæšæºã®ãšã¯ã¹ãã¬ã¹èŠæ±ããã³å¿çãã©ã¡ãŒã¿ãŒãåãå ¥ããé¢æ°ãå«ãã¢ãžã¥ãŒã«ã ã³ã³ãããŒã©ãŒã«ã¯ããŒã¿æ€èšŒãšåºæ¬çãªãªã¯ãšã¹ãåŠçã®ããžãã¯ããããŸããããã®ãªããžããªãŒãšãã«ããŒã䜿çšããããããããŒã¿ããŒã¹ã«çŽæ¥ã¢ã¯ã»ã¹ãããã«ãŒãã³æäœãå®è¡ããŸããã
ãªããžã㪠-ããã¯ããŒã¿ã¢ã¯ã»ã¹ããžãã¯ïŒDBïŒãšè¿œå ã®ããžãã¹ããžãã¯ã§ããããžãã¹ããžãã¯ã®äžéšãã³ã³ãããŒã©ã«å«ããããšãã§ããŸãããããã«ã¯ãªããžããªãæãŸããã§ãã
ãã«ã㌠ïŒãã«ããŒïŒ-ç¹å®ã®æäœãå®è¡-é»åã¡ãŒã«ã®éä¿¡ããšã©ãŒåŠçããã®ã³ã°ãªã©
ã«ãŒã¿ãŒ -ã«ãŒãïŒURLïŒãšã³ã³ãããŒã©ãŒããã®å¯Ÿå¿ãããã³ãã©ãŒãšã®éã®éä¿¡ãèšé²ããŸãã ãã®å ŽåãAPIã¡ãœããã®ã«ãŒããšWebããŒãžïŒãã¥ãŒïŒã®ã«ãŒãã®éã«å€§ããªéãã¯ãããŸããã
ã¿ã¹ã¯ã¯ãåæããŒã¿ããŒã¹ã®äœæããã¡ã€ã«ããã®ããŒã¿ã®ã€ã³ããŒããªã©ã®ã¿ã¹ã¯ã®ããã®ãŠãŒãã£ãªãã£ã¹ã¯ãªããã§ãã
ãã¥ãŒ âãµãŒããŒãã¥ãŒïŒHTMLãã³ãã¬ãŒãïŒã¯ãäžè¬çãªã¬ã€ã¢ãŠããã¥ãŒãšéšåãã¥ãŒããµããŒãããŠããŸãã Contosoã§ã¯ããµãŒããŒãã¥ãŒã¯èªèšŒããŒãžã«äœ¿çšãããæ®ãã®HTMLãã¥ãŒã¯ã¯ã©ã€ã¢ã³ãã§çæãããŸãã
å€å žçãªMVCã¢ãŒããã¯ãã£ã§ã¯ãã¢ãã«ã¯åå¥ã«å®çŸ©ãããŸããããã§ãã¢ãã«ã¯ãã³ã³ãããŒã©ãŒã§äœæããããã¥ãŒãçæããããã«äœ¿çšãããããŒã¿ãæã€ãªããžã§ã¯ãã«ãããŸããã
Expressã¯æè»ãªãã¬ãŒã ã¯ãŒã¯ã§ãããå¿ èŠã«å¿ããŠã³ãŒããæŽçã§ããŸãã ãã®å Žåãéçºè ã¯èªåã«åã£ãæ§é ã決å®ããŸãã åäžã®æ£ããæ§é ã¯ãããŸããããååãšããŠã¯ééããªãè¯ãã§ãã
Expressããã³ãµãŒãããŒãã£ããã±ãŒãžã®å€ãã®æ©èœã¯ãã©ãããŒã¢ãžã¥ãŒã«ãä»ããŠäœ¿çšãããŸãã ããã¯ãå°æ¥ããã±ãŒãžãç°¡åã«çœ®ãæããããæšæºæ©èœãåå®çŸ©ãããã§ããããã䟿å©ã§ãã
æ§æ
éåžžãæ§æã¯ãããžã§ã¯ããµããã£ã¬ã¯ããªã®ç©çãã¡ã€ã«ã«ä¿åãããŸãã Nodeã§ã¯ãä»ã®ãã©ãããã©ãŒã ãšã¯ç°ãªããJSONã¯XMLãããé »ç¹ã«äœ¿çšãããŸãã
æ§æå€ãæäœããããã®ããã±ãŒãžãããã€ããããŸããããconfigãã®æ¹ã奜ãŸããŸããå¥ã®äžè¬çãªãªãã·ã§ã³ã¯ãnconfãã§ãã
ãconfigãã§ã¯ãç¹å®ã®ã«ãŒã«ã«åŸã£ãŠè€æ°ã®æ§æãã¡ã€ã«ããããŒã¿ãèªã¿åãããŸãã ããã©ã«ãå€ã¯ãã¡ã€ã«ãdefault.jsonãã«ä¿åããããã¡ã€ã«ãlocal.jsonãã®å€ã§äžæžãã§ããŸãã JSON圢åŒã«å ããŠãyaml / xml / hjson / jsãªã©ãä»ã®å€ãã®åœ¢åŒã䜿çšããŠæ§æãä¿åã§ããŸãã 詳现ã¯ãã¡ããã芧ãã ãã ã
ããã©ã«ãèšå®ãã¡ã€ã«ãdefault.jsonãããªããžããªã«è¿œå ãããããããåå®çŸ©ã§ãããã¡ã€ã«ãlocal.jsonãã¯ã.gitignoreãä»ããŠãªããžããªããé€å€ãããŸãã
æ§æãä¿åããã«ã¯ãããã€ãã®æŠç¥ã䜿çšã§ããŸãã
- ããã©ã«ãã®éçºè èšå® -æ§æïŒããã©ã«ããã¡ã€ã«ïŒã«ã¯ãããŒã«ã«éçºã«é©ããèšå®ãä¿åãããŸãïŒããŒã«ã«ãã¡ã€ã«ã§ãªãŒããŒã©ã€ãã§ããŸãïŒã éçšç°å¢ã§ã¯ãæ¢å®ã®ãã¡ã€ã«ã§ããéçšèšå®ïŒããŒã«ã«ãã¡ã€ã«ãŸãã¯ãµãŒããŒåãæã€ãã¡ã€ã«ïŒã®æ¢å®ã®èšå®ããªãŒããŒã©ã€ãããå¿ èŠããããŸãã
- ããã©ã«ãã®ãããã¯ã·ã§ã³èšå® -éã«ãããã©ã«ãã®æ§æã§ã¯ãããã¯ã·ã§ã³èšå®ãä¿åãããéçºè ã¯éçºçšã®èšå®ãããŒã«ã«ã§ãªãŒããŒã©ã€ãããŸãã
æåã®ãªãã·ã§ã³ãæãŸãã-æåã«ãæ¬çªçšã®èšå®ããªããžããªã«è¿œå ããããšã¯ã»ãã¥ãªãã£ã®ç¹ã§ããŸãæ£ãããããŸããããããŠã第2ã«ãç°ãªãèšå®å€ãå¿ èŠãšããæ¬çª/ uat /ãã¹ãå±éã®ç°å¢ããã°ãã°ãããŸã ã»ãã¥ãªãã£ã匷åããããã«ããããã¯ã·ã§ã³ã§ã¯ããã©ã«ããã¡ã€ã«ããŸã£ãã䜿çšããã«ãããŒã«ã«ãã¡ã€ã«ã®æ§æå€ãå®å šã«èšå®ããããšãã§ããŸãïŒè©³çŽ°ã«ã€ããŠã¯ãå±éã®èšäºãåç §ããŠãã ããïŒã
Contosoã§ã¯ãæ§æã¯ã©ãããŒã¢ãžã¥ãŒã« 'server / config'ãä»ããŠäœ¿çšãããŸãã
ãã®ã³ã°
åçŽãªãããã°ã®ããã«ãç§ã¯console.logã䜿çšããŠããŸããããã°ãŸãã¯äœããã®è£å©æ å ±ã«ãšã©ãŒã衚瀺ããå¿ èŠãããå Žåã¯ããã®ã³ã°ã©ã€ãã©ãªã®1ã€ã䜿çšããå¿ èŠããããŸãã
ããã€ãã®äžè¬çãªãã®ã³ã°ããã±ãŒãžããããŸãïŒwinstonãbunyanãããã³log4jsã ç§ã¯ãè¯ããã®ããè¯ããã®ãæ±ããªãããšããååã§æã人æ°ã®ããããŠã£ã³ã¹ãã³ãã䜿çšããåé¡ãªããŠã£ã³ã¹ãã³ãçµ±åããããšãã§ããŸãããããã«ã¯å¿ èŠãªãã®ããã¹ãŠãããŸãã
äžçªå¥œããªã©ã€ãã©ãªãæ¯èŒããŠéžæã§ããŸãã è¿œå ãªãœãŒã¹ã«ã¯ããŠã£ã³ã¹ãã³ãšãã³ã€ã³ãæ¯èŒããèšäºããããŸãã
Contosoã¯ãloggerHelperã©ãããŒãä»ãããã°èšé²ã䜿çšããŸãã ãã°ã¯ãšã©ãŒã®ã/ data / logsããã°ã«ä¿åããã蚺æã¡ãã»ãŒãžã®ãã°ã¯ç°ãªããã¡ã€ã«ã«æžã蟌ãŸããŸãã
ããŒã¿æ€èšŒ
å€éšããã¢ããªã±ãŒã·ã§ã³ã«å ¥åããããŒã¿ã®æ£ç¢ºæ§ã確èªããå¿ èŠããããŸãã åçŽãªWebã¢ããªã±ãŒã·ã§ã³ã®å Žåãçä¿¡ããŒã¿ã®äž»ãªãœãŒã¹ã¯Webãªã¯ãšã¹ãã§ãïŒHTMLãã©ãŒã ããŒã¿ãŸãã¯ã¯ã©ã€ã¢ã³ãAJAXãªã¯ãšã¹ãã
ããŸããŸãªã¬ãã«ã§ããŒã¿ãæ€èšŒã§ããŸã; Contosoã§ã¯ãæ€èšŒã¯ã³ã³ãããŒã©ãŒã¬ãã«ã§å®è¡ãããæ£ããããŒã¿ãæ¢ã«ãªããžããªã«å°çããŠãããšæ³å®ãããŸãã ããè€éãªã¢ããªã±ãŒã·ã§ã³ã§ã¯ãããŒã¿ããŒã¹ã®ç¶æ ãå€æŽãããçŽåã«ããªããžããªå ã®ããŒã¿ãè¿œå ã§ç¢ºèªããããšãçã«ããªã£ãŠããå ŽåããããŸãã
çä¿¡ããŒã¿ãããå¹æçã«æ€èšŒããã«ã¯ã ãjoiãããã±ãŒãžã䜿çšã§ããŸãã ããã¯ãç¬ç«ããŠåäœããhapiãã©ã°ã€ã³ïŒè¡šçŸã®ä»£æ¿ïŒã§ãã
ããŒã¿ã¯ããªã¯ãšã¹ãæ¬æïŒreq.bodyïŒãŸãã¯ã¯ãšãªæååãã©ã¡ãŒã¿ãŒïŒreq.queryïŒã§ã³ã³ãããŒã©ãŒã«éãããŸãã ããã¯ãä»»æã®JSãªããžã§ã¯ãã§ããããã®äžã§äœã§ã䜿çšã§ããŸãã ããããç¹å®ã®ã¿ã€ãã®ãã©ã¡ãŒã¿ãŒãæå¹ãªå€ã®ã»ãããããããæã€ç¹å®ã®ãã©ã¡ãŒã¿ãŒã»ãããååŸããããšãæåŸ ããŠããŸãã
ããŒã¿ã®æ£ç¢ºæ§ã確èªããã«ã¯ãäºæ³ãããããŒã¿ãèšè¿°ããJoiã¹ããŒã ã宣èšããã³ã³ãã©ã€ã¢ã³ã¹ãã§ãã¯ãå®è¡ããå¿ èŠããããŸãã
let schema = { id: Joi.number(), number: Joi.number().required(), title: Joi.string().required() }; let obj = { number: 8, title: 'Gone with the Wind' }; Joi.validate(obj, schema, {/*options*/}, (err, val) => { //... });
Contosoã§ã¯ ãcontrollerHelperã®loadSchemaã¡ãœãããåŒã³åºãããšã§ Joiã䜿çšãããŸã ã ãã®ã¡ãœããã¯ãJoi.validateãpromiseã§ã©ããããã¢ããªã±ãŒã·ã§ã³ãç解ããæ€èšŒãšã©ãŒãçæããŸãã
ã¡ãŒã«éä¿¡
é»åã¡ãŒã«ãéä¿¡ããããã«ãç§ã¯äººæ°ãããããããµããŒããããŠãããnodemailerãã䜿çšããŸãã
ããŸããŸãªè»¢éã¢ãŒãïŒé»åã¡ãŒã«ã®è»¢éæ¹æ³ïŒã䜿çšã§ããŸãã ããã©ã«ãã§ã¯ããã€ã¬ã¯ãã¢ãŒãã䜿çšãããŸãã
ãã®ã¢ãŒãã¯ãåå¥ã®SMTPãµãŒããŒããAmazon SESãSendGridãªã©ã®ãµãŒãããŒãã£ã®ã¡ãŒã«ãµãŒãã¹ãå¿ èŠãšããªãããããããã¿ã€ããããžã§ã¯ãã§ã®äœæ¥ã«é©ããŠããŸãã
æ¬ ç¹ã¯ãIPã¢ãã¬ã¹ã«ãã£ãŠã¯ãã¹ãã ãã£ã¬ã¯ããªã«æåã衚瀺ãããå Žåãããããšã§ãã
ããã§èŒžéã®æ§ã ãªã¢ãŒãã®è©³çŽ°ã
HTML圢åŒã®é»åã¡ãŒã«ã®ã³ã³ãã³ããçæããã«ã¯ããhandlebarsããã³ãã¬ãŒããå«ããemail-templatesãããã±ãŒãžã䜿çšãããŸãã Contosoã§ã¯ãé»åã¡ãŒã«ã¯ã/ helpers / emailHelperããä»ããŠéä¿¡ãããé»åã¡ãŒã«ãã³ãã¬ãŒãã¯ã/ data / emailsãã«ä¿åãããŸãã
èªèšŒ
ãã¹ããŒãã¯ãæã人æ°ã®ããããŒãèªèšŒããã±ãŒãžã§ãã æŠç¥ãšåŒã°ããããŸããŸãªèªèšŒã¡ã«ããºã ããµããŒãããŠããŸãã éåžžããããžã§ã¯ãã«ã¯ããã°ã€ã³/ãã¹ã¯ãŒããä»ããŠã·ã¹ãã ã«ã¢ã¯ã»ã¹ããåŸæ¥ã®ã¡ã«ããºã ã䜿çšãããŠãŒã¶ãŒããŒã¿ãã¢ããªã±ãŒã·ã§ã³ããŒã¿ããŒã¹ã«ä¿åããããŒã«ã«æŠç¥ããããŸãã ããã«ãgoogle / facebook / twitterãªã©ã®SSOïŒã·ã³ã°ã«ãµã€ã³ãªã³ïŒãããã€ããŒãä»ããŠã·ã¹ãã ã«ã¢ã¯ã»ã¹ããããWindows Active Directoryãªã©ã®ç¹å¥ãªã¿ã€ãã®èªèšŒã䜿çšãããããããšãã§ããŸãã
, , /, , ( ), .
, , ( ).
Google Firebase. . , , , Firebase.
Contoso SSO google/facebook. SSO , clientID/clientSecret , .
次ã¯ïŒ
JS . JS , , , . , . , , - Angular 2.0 . , !
.
ã楜ãã¿ã«ïŒ