はじめに
こんにちは、ユーザー名%! 今日は、 cluster 、 Express.js 、およびmongooseを使用して、Node.jsでMVCのようなフレームワークアプリケーションを作成する方法について説明します。
タスクは、いくつかの機能を備えたサーバーを上げることです。
- いくつかの非同期スレッドで動作します。
- セッション情報はすべてのフローで共有されます。
- HTTPSサポート。
- 認可
- 簡単に拡張できます。
この記事は初心者向けの初心者向けです。 コメントがあれば嬉しいです!
どこから始めますか? Node.js(npmに付属)をインストールします。 MongoDBをインストールします(+ PATHに追加)。
すべての依存関係をgitにドラッグしないために、NPMプロジェクトを作成します!
$ npm init
いくつかの質問に答える必要があります(Enterキーを押すだけですべてをスキップできます)。 npmのバグとpackage.jsonの作成が完了しない場合があります。
もっと! index.js書きましょう
クラスターについて少し。
クラスターとは何ですか? クラスターは、メインロール(マスター)と作業ロール(ワーカー)の2つのロールがあるアプリケーションシステムです。 すべての要求がCPUCountされるマスターが1つあり、n番目のワーカー( CPUCountコード内)があります。
サーバーにリクエストが届くと、ウィザードはこのリクエストを送信するワーカーを決定します。 作業ノードを作成すると、現在実行中の同じコードを実行してIPCを作成するプロセスが生成されます。 TCP / IP接続が発生すると、ウィザードは、IPCを介して特定のポリシー(詳細はこちら )に従ってSocketいずれかのワーカーに提供します。
コードに戻ります。 マスターとワーカーはどうなりましたか? ウィザードコード:
矢印機能 、 オンライン 、 切断 、 パターンラインについて
次は? 次の仕事! ここでは、1つのコードを記述します。 その後、スキップして追加すると言います:)しかし、その前に、npmから依存関係をダウンロードしてください!
$ npm i express apidoc bluebird body-parser busboy connect-mongo cookie-parser express-session image-type mongoose mongoose-unique-validator nodemon passport passport-local request request-promise
なぜ各モジュールが必要なのですか?
Express -明らかだと思います。apidoc -APIのドキュメント化に便利(オプション)Bluebird約束::)。 私たちはそれを必要とします 標準のPromise 4.x.xには、メモリリークがあったためにバグがありました。 また、mongooseが依存するmpromiseはサポートされなくなりました。 MongooseにBluebirdを使用させる必要があります。body-parser parser-ボディ(ボディ)を持つリクエストでのJSONサポートbusboyボディのリクエストでのフォームデータのサポート。cookie-parser用のシンプルなモジュール。connect-mongoセッションをMongoDBに保存するためにconnect-mongoexpress-sessionセッション用。image-type type-ロード時の画像検証用。mongooseもちろん、MongoDBに簡単にアクセスできますmongoose-unqiue-validatorモデル内のデータが一意でなければならないことを示すため(例:ユーザー名、メールなど)nodemon開発中、ファイルを保存するときにサーバーを自動的に再起動します。passport passport-local local-認証に役立つモジュール!request request-promiseコードをテストします!
それで? nodemonを実行するスクリプトを作成します。 package.jsonに追加します(そのようなフィールドがある場合は置き換えます)
"scripts":{ "start":"nodemon bin/index.js" }
開始するには、次を使用します
$ npm start
将来、テスト、ドキュメントを追加します。
ワーカーに戻りましょう。 まず、Expressを起動しましょう!
var express = require('express');
それだけですか? いや 実際、Expressのセットアップについて忘れていたことがいくつかあります。 修正してください。 結局のところ、フロントパートにファイルが必要ですか? (フロントエンド)。 サポートを追加してください! /publicすべてのコンテンツを含むpublicフォルダーを作成します。 2つのオプションがあります。 NGINXを配置し、配置しないでください。 最も簡単なオプションは、配置しないことです。 Expressに組み込まれているものを使用します。
別のオプションは、NGINXをウィザードとして使用することです。これは、静的ファイルの役割も担います。 これをしばらくの間放置しますが、これはパフォーマンスとスケーリングに役立ちます。
app.get('/')前。 以下を追加します。
それだけですか? もう一度! さて、入力に。 どのように入力を受け取りますか?
var bodyParser = require('body-parser');
クッキーに
しかし、それだけではありません! 次に、セッションで作業するため、 Mongoose機能させる必要があります! 次のコマンドでMongoDBを実行します
$ mkdir database $ mongod
ここで何が起こっていますか? サーバーデータが保存されるデータベースフォルダーを作成します。 フォルダーを.gitignoreに追加することを忘れないでください。 次に、ストレージとしてdatabaseフォルダーを指すMongoDBを起動しdatabase 。 ファイルが小さいように、 --smallfilesパラメーターを渡しますが、この場合でもMongoDBは./database/journalフォルダーに200MBのログを保存します
また、第2部では、MongoDBの帯域幅を増やす方法に関するチュートリアルがあり、Ubuntuのsystemdでサービスとしてインストールします。
次にコードに移ります。 worker.jsファイルで、モジュールがロードされた直後のファイルの先頭に、次を挿入します
require('./dbinit');
binフォルダーにdbinit.jsファイルを作成します。 次のコードを挿入します:
次に、セッションをデータベースにバインドします。 bin/worker.jsに以下を追加します。 モジュールをロードすることから始めます。
var session = require('express-session');
Cookieパーサーの後:
接続のシーケンスに関するいくつかの説明。 express.static('/public') 。 初めに座っているのは ブラウザはファイルのリクエストを並行して送信し、空のセッションでリクエストを送信し、数千のリクエストを作成します。
Cookiesパーサーとセッションは最初に必要です 将来的には承認に使用します。 その後、リクエスト本文のパーサーがあります。 注:最後の2つは交換できます。 認可サービス。 パーサーとセッションの後に行く必要があります それらを使用しますが、コントローラの前に ユーザー情報を使用します。 次はコントローラーです。少し後でそれらに戻ります。
エラーハンドラになりました。 彼は最後に行くべきだ Expressではそう書かれています:)
bin/worker.js app.listen(.....);前bin/worker.js追加しbin/worker.js app.listen(.....); 次の
次に、 errorHandler.jsファイルを作成します
Workerでの作業はほぼ終了しました。 ただし、モデルとそのロードを構成する必要があります。
models保存するmodelsフォルダーを作成します。 将来的には、データベースのあるバージョンから新しいバージョンに移行することにより、さらに多くの移行を行う予定です。
modelsフォルダーにindex.jsおよびuser.jsファイルを作成します。 したがって、 index.jsすべてのモデルのロードとエクスポートをuser.jsますuser.jsファイルには、Mongooseのモデルと、モデルに関連付けられたいくつかのメソッドと関数が含まれます。 Mongoose Webサイトまたはドキュメントでモデルについて読むことができます 。
index.jsように記述します。
module.exports = {
そして、 user.jsように記述します。
次に、画像( view変換を試みる)とコントローラーを扱います。 controllersとviews 2つのフォルダーを作成しviews 。 次に、イメージをレンダリング(描画、描画、コンパイル、塗りつぶし)する必要があるライブラリを選択します。 口ひげは私にとって非常に簡単であることが判明しました。 ただし、レンダリングエンジンを簡単に変更できるようにするために、consolidateを使用します。
$ npm i consolidate mustache
Consolidateでは、プロジェクトで使用されるエンジンをインストールする必要があるため、インストールするエンジンを変更することを忘れないでください。 次に、 app.get('/');全体を挿入して置き換えapp.get('/'); に
var cons = require('consolidate');
次に、 viewsフォルダーで、index.htmlを追加します
{{title}}
127.0.0.1:3000移動してHello, World! 。 コントローラーに移りましょう! 行app.get(.................)削除します。 次に、コントローラーをダウンロードする必要があります。 ( controllersフォルダにあります)。 リモートコードの代わりに、次を挿入します。
app.use(require('./../controllers'));
ファイルcontrollers/index.js書き込みます
var app = require('express')(); app.use(require('./home')); module.exports = app;
そして、ファイルcontrollers/home.js書いてください:
var app = require('express')(); app.get('/',(req,res,next)=>{
これで最初のパートは終わりです! ご清聴ありがとうございました。 私たちの注意なしに多くが残ったので、第2部でこれを修正する必要があります。 多くの物議を醸す問題があります。 2番目の部分で修正される多くのエラーもあります。 コードは、少し後でgithubに投稿されます。 プロジェクトの本質については、第2部で説明します。