はじめに
こんにちは、ユーザー名%! 今日は、 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-mongo
express-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部で説明します。