
泚ç®ã«å€ããæåã«ããããããã
Node.jsã¯äŸç¶ãšããŠç¹æ®ãªæè¡ã§ãããäž»ã«å¥ã®æè¡ã¹ã¿ãã¯ã§èšè¿°ãããã·ã¹ãã ã®ããã«ããã¯ã«ãã£ãŠã«ããŒãããŠããŸãã ãã®ç¶æ³ã®çç±ã¯ãããŒãèªäœã«ãä»ã®èšèªã§äœ¿çšãããã¢ããªã±ãŒã·ã§ã³ãœãããŠã§ã¢ã®é«ééçºãæäŸããã©ã€ãã©ãªãå€ããªããšããäºå®ã«ãããŸãã ããšãã°ãã³ãŒãå
ã®ç°ãªãURLã®ãã³ãã©ãŒãåé¢ããéçãã¡ã€ã«ãäžããã»ãã·ã§ã³ãæŽçããè€æ°ã®ã¹ã¬ãããå®è¡ããããŒã¿ããŒã¹ã«ã¢ã¯ã»ã¹ããã¡ã¢ãªã«ããŒã¿ããã£ãã·ã¥ãããŠãŒã¶ãŒæš©éãå¶éãããã°ãååŸããŠããŒããŒã·ã§ã³ãããããã¯ãŒã¯APIãäœæãããã³ãã¬ãŒããã¬ã³ããªã³ã°ããŸããURLæžãæãã®æ§æããµãŒããŒããã¯ã©ã€ã¢ã³ããžã®ã€ãã³ãã®è¿
éãªé
ä¿¡ãæäŸããŸããããããã¹ãŠãããã³ãã®ä»ã®å€ãã®ã¿ã¹ã¯ã§ã¯ãåå¥ã®ã©ã€ãã©ãªãŒïŒã¢ãžã¥ãŒã«ïŒã䜿çšãããŸãã ããŸããŸãªã¢ãžã¥ãŒã«ãããŸããŸãªéçºè
ã«ãã£ãŠäœæãããŠãããåå ããã®ã¯é£ãããç«¶åããŸãã äžè¬ã«ãã»ãŒãã¹ãŠã®Webã¢ããªã±ãŒã·ã§ã³ã«å¿
èŠãªãã®äžé£ã®å¿
èŠãªæ©èœããã¹ãŠ1ã€ã®ã¢ããªã±ãŒã·ã§ã³ãµãŒããŒã«çµåããã³ãŒãã®äžè²«æ§ãé«ããã¢ããªã±ãŒã·ã§ã³ãµãŒããŒã³ã¢ãåå¥ã®ã©ã€ãã©ãªããåéããããœãªã¥ãŒã·ã§ã³ãããã¢ããªã·ãã¯ã§äžè²«æ§ã®ãããã®ã«ããããšã決å®ããŸããã
Impressãããžã§ã¯ãã¯ãã§ã«
ãããã¿ã€ããšããŠçºè¡šãããŠãããçŸåšãè¿
éãªã¢ããªã±ãŒã·ã§ã³éçºã«å¿
èŠãªãã¹ãŠã®æŠåšãæäŸããŠããŸããããã¯ã倿°ã®ã©ã€ããããžã§ã¯ãã§ãã¹ããããŠããŸãã Impressã¯ãå°è±¡æŽŸã衚çŸäž»çŸ©ãšç°ãªãã®ãšåãããã«ãåºãæ®åããŠããä»ã®ãã©ãããã©ãŒã ãšã¯å€§ããç°ãªããŸããã€ãŸããçªç¶ã®ææ
ã®ççºãšã¯å¯Ÿç
§çã«ãå
šäœçã§ããèãæãããçŸçå°è±¡ãçã¿åºããŸãã ããããç§ãã¡ã¯ãä»ã®äººã®ã³ãŒããæ¹å€ããããšãªããImpressã®èšèšæ©èœãå®èšŒããããã«é²ã¿ãŸãã
ããã€ãã®ã³ãŒãã¡ããªãã¯
- ã³ã¢ãµã€ãºãã€ã³ãã¬ã¹ ïŒæå€§ã®ã³ãŒãã³ããŒã¬ã³ã¹ã䜿çšïŒ /lib/impress.js-44Kb
- Impressã³ãŒãå
šäœã®ãµã€ãº ïŒæ¥ç¶æ§ã¯é«ãããæ¥ç¶ã¯äžèŠïŒ/ lib / * -110Kb
- å€éšã©ã€ãã©ãªã®ãµã€ãº ïŒãªãã·ã§ã³ã®ããŒããå«ãïŒã/ node_modulesã®ãã¹ãŠã¯56MBã§ã
- ãããã®ãã¡ãç¬èªã®ããŒã¿ããŒã¹ãæã€geoip-liteã¢ãžã¥ãŒã«ã¯40Mbã§ã
- ã«ãŒãã«ã©ã€ãã©ãªã®ããŒãæ¹æ³ïŒãšããŸããã¯ïŒããã§èª¬æ-node.jsããã³ãã©ãŠã¶çšã®Impressã®JavaScriptã¢ãžã¥ãŒã«ã®ãã¿ãŒã³ ïŒã
- ãããžã§ã¯ãæéïŒ3.5ãæïŒãããã¿ã€ããšããŠã®å¥ã®1ãæåãnpmããã³githubã§ã®å
¬éåïŒã
- éçºåŒ·åºŠ ïŒãã®æéäžã«47ããŒãžã§ã³ããªãªãŒã¹ãããŸããã äœãã2ã3æ¥ããšã«çµäºããŸãã
- äŸåé¢ä¿ ïŒçŸåšïŒïŒ async ã cluster ã colors ã mkdirp ã mongodb ã mysql ã memcached ã nodemailer ã geoip-lite ã uglify-js ã multiparty ã iconv-lite
æ©èœãšçšé
- è€æ°ããŒãžã®Webã¢ããªã±ãŒã·ã§ã³ãäœæããŸã ãã€ãŸãããµãŒããŒãã³ãã¬ãŒããšã³ãžã³ïŒã«ãŒãã«ã«çµã¿èŸŒãŸããŠããŸãïŒãšããŒãžã®åèªã¿èŸŒã¿ã䜿çšããŸãã
- ã¯ã©ã€ã¢ã³ãç»é¢ãåçã«åæ§ç¯ããããã«ãHTMLãŸãã¯JSONãã©ã°ã¡ã³ãã転éããŠãAJAXã䜿çšããŠãã©ãŠã¶ãŒãšãµãŒããŒAPIã®éã§ããŒã¿äº€æãè¡ã1ããŒãžWebã¢ããªã±ãŒã·ã§ã³ãäœæããŸãã
- åäžããŒãžãšè€æ°ããŒãžã®ã¢ãããŒããæ··åšãããã€ããªãããœãªã¥ãŒã·ã§ã³ã®äœæã
- ãã©ãŠã¶ãŒãiOSãAndroidãªã©ã®ã¢ãã€ã«ã¢ããªã±ãŒã·ã§ã³ãå«ãããµãŒããŒéããã³ã¯ã©ã€ã¢ã³ããšãµãŒããŒéã®å¯Ÿè©±ã®ããã®ãããã¯ãŒã¯APIã®éçº
- cache.manifest ãIndexedDBãŸãã¯WebSQLã®ããŒã«ã«ã¹ãã¬ãŒãžãããã³ãªã³ã©ã€ã³ãšãªãã©ã€ã³ã®äž¡æ¹ã§ãªãã©ã€ã³ã§æ©èœãããªãã©ã€ã³HTML5ã¢ããªã±ãŒã·ã§ã³ã ãã¡ãããããã¯Impressã®ã¿ã¹ã¯ã§ã¯ãããŸãããããã®ãããªéå
žåçãªå Žåã§ã䜿çšããçµéšããããŸãã
- åäžã®ã¢ããªã±ãŒã·ã§ã³ãµãŒããŒïŒãã¹ã¯ãå«ãïŒã§è€æ°ã®ãã¡ã€ã³ã«ãµãŒãã¹ãæäŸããŸã ã 1ã€ã®ã¢ããªã±ãŒã·ã§ã³ãæ§æããä»®æ³ãã¹ããã»ããã¢ããããã¡ã«ããºã ããŸãã¯ãããã§ïŒ1ã€ã®ããŒããšç°ãªãããŒãã®äž¡æ¹ã§ïŒç°ãªãã¢ããªã±ãŒã·ã§ã³ãèµ·åããã¡ã«ããºã ã
- URLæžãæããµããŒãã䜿çšããŠä»ã®ãµãŒããŒããã³ããŒãïŒãªããŒã¹ãããã·ïŒã«åŒã³åºãã転éã ãconfig.jsã§JSON圢åŒã®URLã«ãŒãã£ã³ã°ãèšå®ãããã¿ãŒã³ãšæ£èŠè¡šçŸã䜿çšããŸãã 転éã¯ãã¢ããªã±ãŒã·ã§ã³ãµãŒããŒã®äžéšã®ã³ãŒã«ã®åŠçãšçµã¿åãããããšãã§ããŸãã 転éã䜿çšãããšãè€æ°ã®èšèªããµãŒããŒããã¯ãããžãŒã¹ã¿ãã¯ãã1ã€ã®ã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ã§ããŸãã
- RAMã§ã®ãã£ãã·ã¥ãéçãã©ãŠã¶ãŒjsãã¡ã€ã«ã®çž®å°ãå§çž®å¯èœãªåœ¢åŒã®gzipå§çž®ãããã³ãif-modified-sinceãããããŒã®åä¿¡æã®HTTP 304ïŒNot ModifiedïŒã®æ£ããæ»ãã«ããéç åºå ã
- çµã¿èŸŒã¿ã®èªèšŒã·ã¹ãã ãšãMongoDBã«ãŠãŒã¶ãŒãä¿åããããã®ãããã€ããŒããããŸãã
- ã»ãã·ã§ã³ãRAMã«ä¿åããMongoDBã«ä¿åãããªããŒãäžã«ã»ãã·ã§ã³ã埩å
ãããçµã¿èŸŒã¿ã®ã»ãã·ã§ã³ã·ã¹ãã ããããŸã ã èªèšŒãããŠããªãã»ãã·ã§ã³ãã€ãŸã ç»é²ããã«ãŠãŒã¶ãŒã®ç¶æ
ãèå¥ããŠä¿åããŸãã
- ããã»ã¹éã§ã¿ã¹ã¯ã忣ããããã®ããã€ãã®æŠç¥ããµããŒãããIPCãä»ããããã»ã¹éã®çžäºäœçšã®å®è£
ã«ãããè€æ°ã®ããã»ã¹ã§åäœããæ©èœïŒå°æ¥ããããã®ç®çã§ZeroMQã䜿çšããè€æ°ã®ãµãŒããŒã«ééçã«ã¹ã±ãŒãªã³ã°ããäºå®ã§ãïŒã ç°ãªããµãŒããŒããã»ã¹ã«æ¥ç¶ãããŠããã¯ã©ã€ã¢ã³ãéã®å¯Ÿè©±ã確ç«ããå Žåã¯ãã¡ãã»ãŒãžã³ã°ã䜿çšãããŸãã
- ã»ãã·ã§ã³ãããã»ã¹ã«æ¥çããããã®2ã€ã®æ¹æ³ã®å®è£
ïŒ ãIPã¹ãã£ãããŒã ïŒIPã«ããæ¥çïŒãŸãã¯ãã¯ãããŒã¹ãã£ãããŒã ïŒå€éšãã©ã³ãµãŒããã³ããŒãã«ããå€éåãšçµã¿åãããŠäœ¿çšââãããCookieã«ããæ¥çïŒã ããã«ãããåãIPããã®ãã¹ãŠã®æ¥ç¶ãŸãã¯ïŒèªèšŒåŸã®ïŒèŠæ±ã®ç¹°ãè¿ãäžã«åãCookieã䜿çšããŠãã»ãã·ã§ã³ïŒç¶æ
ïŒãæ ŒçŽããåãããã»ã¹ã«å床ã«ãŒãã£ã³ã°ã§ããŸãã
- æ¯æ¥æ°ãããã¡ã€ã«ãäœæããå€ããã¡ã€ã«ãåé€ããŠãèŠæ±ã®ãã°ãèšé²ããŸãïŒä¿åãããå±¥æŽã®å¶éãèšå®ãããŸãïŒã
- Impressã³ã¢ã«æ¢ã«çµã¿èŸŒãŸããŠããCMSã®äœæ¥ã¯å®äºéè¿ã§ãããããã«ããŒãžãç·šéããããã®ç®¡çã€ã³ã¿ãŒãã§ã€ã¹ãåãåããŸãã
ããŠããããã®æ©èœã«ã€ããŠã¯è©³ãã説æããŸããã
æ¢ã«ãããã«ã€ããŠæžããŠããã®ã§ãäŸãæããŠèŠãã»ããè¯ãã§ãããïŒ
- ãã¡ã€ã«ã·ã¹ãã ããŒã¹ã®URLã«ãŒãã£ã³ã°ïŒãã£ã¬ã¯ããªãžã®URLã®ãããã³ã°ïŒã
- ãµãŒããŒåŽã®JavaScriptããã³RAMãã³ãã¬ãŒãã®ãã£ãã·ã¥ã
- ã¡ã€ã³ã¢ããªã±ãŒã·ã§ã³ãåèµ·åããã«ã¢ããªã±ãŒã·ã§ã³ã³ãŒãã倿Žããæ©èœïŒããã»ã¹ã¯ãã£ã¹ã¯äžã®ãã¡ã€ã«ãžã®å€æŽãç£èŠããŸãã
- è€æ°ã®èµ·åæŠç¥ïŒè€æ°ãåäžãç¹æ®åãã¹ãã£ãããŒã
- ã¡ã€ã³ã¢ããªã±ãŒã·ã§ã³ãå®å
šã«åèµ·åããã«æ§æã倿Žããæ©èœïŒããã»ã¹ã¯config.jsãã¡ã€ã«ã®æ§æãç£èŠããŸãïŒã
- ã¯ã©ã€ã¢ã³ãïŒPULLã¹ã¿ã€ã«ïŒããã®ç¶ç¶çãªèŠæ±ãªãã«ãã¯ã©ã€ã¢ã³ãããŒããžã®ãªãŒãã³æ¥ç¶ãä»ããŠãµãŒããŒïŒPUSHã¹ã¿ã€ã«ïŒããã€ãã³ãããããŒããã£ã¹ãããã·ã¹ãã ã§ã®SSEïŒãµãŒããŒéä¿¡ã€ãã³ãïŒã®ãµããŒãã
MySQLã¢ããªã³ãã©ã€ããŒã¢ãã€ã³ïŒ
JSONæ§æã«åºã¥ãã¡ã¿èšèªãéçºãããŸãããããã«ããããªã¬ãŒã·ã§ãã«ããŒã¿ããŒã¹ã®æ§é ãç°¡åãã€ç°¡åã«èšè¿°ãããããã®æ§é ãSQLã¹ã¯ãªããã«å€æã§ããŸãã / node_modules / impress / schemas /ãã£ã¬ã¯ããªã®äŸãåç
§ããŠãã ãã翻蚳ã«ã¯ã次ã®ã³ãŒãã䜿çšã§ããŸãã
var schemaCore = require('./schemas/impress.core.schema.js'); var scriptCore = db.schema.mysql.generateScript(schemaCore, true).script; console.log(scriptCore);
ããã«ãã¹ãã£ãã©ãŒã«ãã£ã³ã°ãã©ãŒã ãã°ãªãããããã³äžè¬çãªãŠãŒã¶ãŒã€ã³ã¿ãŒãã§ã€ã¹ã«ã¹ããŒã ã䜿çšã§ããŸãããããã¯å¥ã®åºçç©ã®ãããã¯ã§ãã
äŸ
Impressã«ã¯ååãªäŸããããŸãã NPMãªããžããªããã®
ã€ã³ã¹ããŒã« ïŒ
npm install impress ïŒã®çŽåŸã«ããµã³ãã«ã/ node_modules / impress / examples / copyContentToProjectFolderãã©ã«ããŒãããããžã§ã¯ãã«ãŒãã«ã³ããŒããŠãããã€ã§ããŸãã ã»ãã·ã§ã³ãä¿åããããã®MongoDBã¯ãèµ·åã«é©ããŠããŸãïŒè¿ãå°æ¥ãã»ãã·ã§ã³ã¹ãã¬ãŒãžã®ä»ã®ãããã€ããŒãå®è£
ãããäºå®ã§ãïŒã ãã ããããŒã¿ããŒã¹ãªãã§äŸãå®è¡ã§ããŸãã MongoDBããŸã ååšããå Žåãconfig.jsã§ãsession.persistããtrueã«èšå®ããåãæ§æã§ãdatabases.impressãã®ã³ã¡ã³ããå€ãããplugins.requireãã»ã¯ã·ã§ã³ã®ã¢ãžã¥ãŒã«ã®ã³ã¡ã³ããè§£é€ããå¿
èŠããããŸãããdbããã db.mongodb "ã" impress.security.mongodb "ã ãã®åŸã
node setup.jsãå®è¡ããŠå¿
èŠãªã³ã¬ã¯ã·ã§ã³ãšã€ã³ããã¯ã¹ãäœæããã¢ããªã±ãŒã·ã§ã³ãµãŒããŒãèµ·åããŸãïŒ
node server.jsAPIïŒRPCïŒïŒSTATEfulããã³STATEless
Impressãéçºãããäž»ãªã¿ã¹ã¯ã®1ã€ã¯ãSTATElessååïŒã€ãŸãRESTãµãŒããŒïŒãšããè峿·±ãSTATEfulååã®äž¡æ¹ã§ã¢ããªã±ãŒã·ã§ã³ãµãŒããŒãäœæããããšã§ãã RESTã¯ããµãŒããŒãšã¯ã©ã€ã¢ã³ãã®ã©ã¡ãã§ããªãèŠæ±/å¿çã®ãã¢ã®éã§ããªããžã§ã¯ãã®ç¶æ
ãä¿åãããããšãæãåºããŠãã ããã ã¯ã©ã€ã¢ã³ã/ãµãŒããŒã¢ããªã±ãŒã·ã§ã³ã®ããŒã¹ãšãªãRPCãšã¯å¯Ÿç
§çã«ãã¯ã©ã€ã¢ã³ãã§ã¢ãã«ãäœæãããµãŒããŒã§ã¢ãã«ãäœæãããããã®ã€ã³ã¿ãŒãã§ã€ã¹ããããã¯ãŒã¯çµç±ã§æ¥ç¶ãããããã®ã¢ãã«éã§ã€ãã³ããšåŒã³åºãããããŒããã£ã¹ãããã®ãäžè¬çã§ãã ããã§ã¯ãããŒãã䜿çšããŠãã¯ã€ã€ã®äž¡ç«¯ã«ã¢ãã«ãå±éããAJAX / JSONãä»ããŠåŒã³åºããåæã§ããŸããããã¯ããã¡ããã¢ããªã±ãŒã·ã§ã³ã¢ããªã±ãŒã·ã§ã³ã«ãšã£ãŠãã䟿å©ã§ãã RESTã¯ç³åšæä»£ã®éãWebãµãŒããŒïŒApacheãIISãªã©ïŒã®ããŒãã«å°éãããã®ãã³ã«ïŒãããã«é¢é£ããŠïŒå€éšã¢ããªã±ãŒã·ã§ã³ãèµ·åããCGIãä»ããŠHTTPãããã³ã«èŠæ±ãæž¡ããŸãã ãã®ãããªã¢ããªã±ãŒã·ã§ã³ã¯æ°ããããã»ã¹ãçæããŸã;äœæ¥ç°å¢ãåæåããå¿
èŠããããŸãã ããŒã¿ããŒã¹ãšã®æ¥ç¶ã®ç¢ºç«ããã¹ãŠã®ããŒã¿ã®å±éããã¡ã€ã«ã·ã¹ãã ããã®èªã¿åãïŒå¿
èŠãªå ŽåïŒãªã©ã ãããŠããããã¹ãŠã¯ãæ°ããªããªç§ã§äœæ¥ãå®äºããŠã¡ã¢ãªãè§£æŸããããŒã¹ããåæããããã ãã§ãã ãŠã§ãã®åã«ãSTATEful APIãRPCãšããŠæ¡çšããèšèªïŒCOMãDCOMãCorbaãªã©ïŒã§æžããŠããŸããããç§ã«ãšã£ãŠRESTã®æŠå¿µã¯åžžã«æ¬ ããŠããŸããã ãããŠæåŸã«ãããŒãã®ç€Œæã«åãæ¿ããåŸãç§ã¯å¹žãã§ããã ããã§ããã¡ã¢ãªå
ã®ããŒã¿ãæ¡åŒµã§ãããªã¯ãšã¹ããããªã¯ãšã¹ããžã¯ç§»åãããRAMã«éãã»ãã·ã§ã³ãä¿åã§ããããã»ã¹ãå®äºããŠåèµ·åãããšãã«ããããã·ãªã¢ã©ã€ãº/ãã·ãªã¢ã©ã€ãºããŸããã ãããŠãRESTã¯ãã¥ãŒã¹ããŒããã¹ããŒããµãŒããŒã®ãããªæŸèæãåããéå»ã®ãã®ã§ãããšããããžã§ã³ãæã£ãŠããŸããã STATEful APIã¯ãããŒããç¥ã£ãŠãããã¹ãŠã®çãç©ã«å
šèœè
ã«ãã£ãŠäžããããæå€§ã®ç¥çŠã§ããããšã«æ°ä»ããŸããã
æ°ããAPI URLãã³ãã©ãŒãäœæããã«ã¯ã次ã®ãã®ãå¿
èŠã§ãã
1.ãã©ã«ããŒ/api/myAPI/getSomething.json/ãäœæããŸã
2. post.jsãã¡ã€ã«ãããã«å
¥ããŠæžã蟌ã¿ãŸãã
module.exports = function(req, res, callback) { db.impress.collectionName.find({ fieldName: req.post.fieldValue }).toArray(function(err, nodes) { res.context.data = nodes; callback(); }); }
3. / api / myAPIãã£ã¬ã¯ããªã§ãaccess.jsãã¡ã€ã«ãäœæããŠæžã蟌ã¿ãŸãã
module.exports = { guests: false, logged: true, http: true, https: true }
httpsã®å Žåã¯ãconfig.jsã§èšå®ãèšå®ããaccess.jsã§ãã®ãã©ã«ããŒã®httpãçŠæ¢ããã ãã§ãã ããã«ãã¡ã¬ã³ã²ãµãŒããŒã®åèµ·åçšã®ãã³ãã©ãŒãäœæããå¥ã®ãã©ã«ããŒãäœæããŠãããã«ãã¡ã€ã«ã«ã³ãŒããæžã蟌ãããšãã§ããŸãã ã¡ã¢ãªå
ã®ã³ãŒãã«åããŠã¢ã¯ã»ã¹ãããšããããžã®ãã¡ã€ã«ã倿Žããããšãæ°ããã³ãŒããã¡ã¢ãªã«ããŒããããããã«åº§ã£ãŠåŒã³åºããåŸ
ã¡ãŸãã
ãã¢ã¢ããªã±ãŒã·ã§ã³ã®ç»é¢
ãµã³ãã«ãã€ã³ã¹ããŒã«ããŠå±éãããšããã®ãããªç»é¢ã衚瀺ãããŸãã 1ã€ç®ã¯ãŠãŒã¶ãŒç»é²ãã©ãŒã ã§ããMongoDBãæ¥ç¶ãããŠãããšãã«æ©èœããã¢ã«ãŠã³ããšä¿åãããã»ãã·ã§ã³ã«é¢é£ãããã¹ãŠã®æ©èœïŒã¢ã«ãŠã³ãã®äœæããµã€ã³ã€ã³ããµã€ã³ã¢ãŠãïŒãæ©èœããŸãã

å·Šã®åã®äŸãèµ·åãããã¿ã³ã¯ãFirebugããªã³ã«ãããããã©ãŠã¶ããŒã¹ã®å¥ã®éçºè
ããŒã«ã§è¡šç€ºãããšæé©ã§ãã

æå€§ã®äŸã¯ããã§ã«èª¬æãã
MySQLããã³MongoDBã®ãŠãããŒãµã«ç®¡çããã«ã§ãã 圌女ã®ã¹ã¯ãªãŒã³ã·ã§ããã¯æ¬¡ã®ãšããã§ãã

GithubïŒ
https :
//github.com/tshemsedinov/impressnpmïŒ
https :
//npmjs.org/package/impress