
ããã€ãã®ã³ãŒãã¡ããªãã¯
- ã³ã¢ãµã€ãºãã€ã³ãã¬ã¹ ïŒæ倧ã®ã³ãŒãã³ããŒã¬ã³ã¹ã䜿çšïŒ /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ã¢ããªã³ãã©ã€ããŒã¢ãã€ã³ïŒ
- 䟿å©ãªããŒã¿ã¢ã¯ã»ã¹ã¡ãœããïŒqueryRowãqueryValueãqueryArrayãqueryHashãqueryKeyValueãcountã 䜿çšäŸïŒ https : //github.com/tshemsedinov/impress/wiki/MySQL-Data-Access-Methods
- ããŒã¿ããŒã¹ãµãŒãã¹æ§é ã®ã€ã³ããã¹ãã¯ã·ã§ã³ã¡ãœããïŒããŒã¿ããŒã¹ããã¡ã¿ããŒã¿ãååŸïŒïŒãã©ã€ããªãå€éšãå¶çŽããã£ãŒã«ããããŒã¿ããŒã¹ãããŒãã«ãtableInfoãã€ã³ããã¯ã¹ãããã»ã¹ãglobalVariablesãglobalStatusãusersã 䜿çšäŸïŒ https : //github.com/tshemsedinov/impress/wiki/MySQL-Introspection-Methods
- SQLã¯ãšãªãèªåçæããããã®ã¡ãœããïŒwhereãselectãupdateãinsertãupsertãdeleteã 䜿çšäŸïŒ https : //github.com/tshemsedinov/impress/wiki/MySQL-Query-Generator-Methods
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.js
APIïŒ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/impress
npmïŒ https : //npmjs.org/package/impress