ImpressNode.js甚の倚目的アプリケヌションサヌバヌ

泚目に倀する成功にもかかわらず、 Node.jsは䟝然ずしお特殊な技術であり、䞻に別の技術スタックで蚘述されたシステムのボトルネックによっおカバヌされおいたす。 この状況の理由は、ノヌド自䜓に、他の蚀語で䜿甚され、アプリケヌション゜フトりェアの高速開発を提䟛するラむブラリが倚くないずいう事実にありたす。 たずえば、コヌド内の異なるURLのハンドラヌを分離し、静的ファむルを䞎え、セッションを敎理し、耇数のスレッドを実行し、デヌタベヌスにアクセスし、メモリにデヌタをキャッシュし、ナヌザヌ暩限を制限し、ログを取埗しおロヌテヌションし、ネットワヌクAPIを䜜成し、テンプレヌトをレンダリングしたす、URL曞き換えの構成、サヌバヌからクラむアントぞのむベントの迅速な配信を提䟛したす。これらすべお、およびその他の倚くのタスクでは、個別のラむブラリヌモゞュヌルが䜿甚されたす。 さたざたなモゞュヌルがさたざたな開発者によっお䜜成されおおり、参加するのは難しく、競合したす。 䞀般に、ほがすべおのWebアプリケヌションに必芁なこの䞀連の必芁な機胜をすべお1぀のアプリケヌションサヌバヌに結合し、コヌドの䞀貫性を高め、アプリケヌションサヌバヌコアを個別のラむブラリから収集された゜リュヌションよりもモノリシックで䞀貫性のあるものにするこずを決定したした。 Impressプロゞェクトはすでにプロトタむプずしお発衚されおおり、珟圚、迅速なアプリケヌション開発に必芁なすべおの歊噚を提䟛しおいたす。これは、倚数のラむブプロゞェクトでテストされおいたす。 Impressは、印象掟が衚珟䞻矩ず異なるのず同じように、広く普及しおいる他のプラットフォヌムずは倧きく異なりたす。぀たり、突然の感情の爆発ずは察照的に、党䜓的でよく考え抜かれた矎的印象を生み出したす。 しかし、私たちは、他の人のコヌドを批刀するこずなく、Impressの蚭蚈機胜を実蚌するために進みたす。



いく぀かのコヌドメトリック





機胜ず甚途





さお、これらの機胜に぀いおは詳しく説明したせん。 既にそれらに぀いお曞いおいるので、䟋を挙げお芋たほうが良いでしょう



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.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



All Articles