ノード(ダウンロード)をインストールした後、マシンにディレクトリを作成し、最初のアプリケーションを開始します。
$ mkdir helloworld
このディレクトリでは、アプリケーション「パッケージ」を定義します。これは、他のノードパッケージと違いはありません。ファイルディレクトリのJSONファイルは、依存関係を明確に定義します。 NPMコマンドを使用して、「3.x」以外のバージョンをインストールする代わりに、最新バージョンのExpressを取得できます。
{"name": "hello-world"、 "description": "Hello World Test App"、 "バージョン": "0.0.1"、 "private":true、 "依存関係":{"express": "3.x"}}}今、あなたはパッケージを持っています。このディレクトリでは、NPM(1)を使用してこの依存関係をインストールできます。この場合、次のように入力する必要があります。
$ npmインストール
NPMが終了すると、 /node_modulesディレクトリで依存するExpress 3.xがあります。これは、次のコードスニペットに示されているExpress Treeやそれ自体の依存関係と同様に、NPM LSで検証できます。
$ npm [email protected] /private /tmp└─┬[email protected] [email protected] [email protected] [email protected]
次に、アプリケーション自体を作成します!どちらが好きかに関係なく、app.jsまたはserver.jsというファイルを作成し、Expressを紹介し、Express()を使用して新しいアプリケーションを作成します。
var express = require( 'express'); var app = express();
新しいアプリケーションインスタンスは、app.verb()を介してルートの定義を開始できます。この場合、「hello world」文字列を介して「get/」要求に応答します。 reqとresはあなたに提供されるまったく同じノードオブジェクトであるため、res.pipe()、req.on( 'data'、callback)、およびExpressとは関係のない他のことを呼び出すことができます。
Expressはこれらのオブジェクトを強化して、コンテンツの長さを追加することに加えて、res.send()などの高レベルのインターフェイスを提供します。
app.get( '/hello.txt'、function(req、res){res.send( 'hello world');});ここで、nodeのnet.server #listen()と同じパラメーターを受け入れるために、接続をバインドして聞くためのapp.listen()メソッドを呼び出します。
var server = app.listen(3000、function(){console.log( 'listening on port%d'、server.address()。port);});Express(1)を使用してアプリケーションを生成します
Expressチームは、Express-Generator(1)という名前の便利なプロジェクトジェネレーターを維持しています。 NPMでExpress-Generatorをグローバルにインストールすると、コンピューターのどこからでもアクセスできます。
$ npmインストール-G Express -Generator
このツールは、アプリケーションフレームワークを簡単に取得する簡単な方法を提供しますが、たとえば範囲が限られている場合、たとえば、少数のテンプレートエンジンのみをサポートし、Express自体は実際にノード用のWebサイトフレームワークテンプレートの構築をサポートします。あなたはそれをヘルプで見ることができます:
使用量:[オプション]オプションをExpress:-H、 - ヘルプ出力使用情報-V、 - バージョン番号-E、-EJSはEJSエンジンサポート(デフォルトはJadeにデフォルト)-H、 - hogan.JSエンジンサポート-C、 - CSの追加スタイルシートサポート(少ない|スタイラス|ステイラス|コンパス)
いずれにせよサポートされているアプリケーションを生成したい場合は、単に実行する必要がある::
$ Express -CSS Stylus MyAppCreate:MyAppCreate:MyApp/Package.jsonCreate:MyApp/App.jsCreate:MyApp/Public/JavaScriptsCreate:MyApp/Public/ImageCreate:MyApp/Public/StyleHeetscreate:MyApp/Public/StyleHeets/Style. -Style. -StyleCreate: myapp/routes/index.jscreate:myapp/views/index.jadecreate:myapp/views/layout.jadeinstall依存関係:$ cd myapp && npm installrunアプリ:$ debug = myappノードアプリ
他のノードアプリケーションと同様に、次の依存関係をインストールする必要があります。
それなら始めましょう。
$ npm開始
これは、簡単なアプリケーションを稼働させるために必要なすべてです。 Expressは特定のディレクトリ構造に縛られていないことを忘れないでください。これらは単なるガイドです。アプリケーション構造の選択は、GitHubリポジトリで表示できます。
エラー処理
ミドルウェアの定義のエラーは通常のミドルウェアのようなものですが、4つのパラメーターを定義する必要があります。これは関数の署名です(err、req、res、next):
app.use(function(err、req、res、next){console.error(err.stack); res.send(500、 '何かが壊れた!');});強制エラーの取り扱いミドルウェアは通常、最後に定義されていませんが、他のapp.use()の後、その呼び出しは次のようになります。
var bodyparser = require( 'body-parser'); var methodoverride = require( 'method-override'); app.use(bodyparser()); app.use(methodoverride()); app.use(app.router); app.use(function(err、req、res、next){// logic});これらのミドルウェアの応答は完全に任意です。 HTMLエラーページ、シンプルなメッセージ、JSON文字列、またはその他の応答に応答することをお勧めします。
組織化された高レベルのフレームワークを構築するには、通常のミドルウェアを定義するように、これらのエラー処理ミドルウェアのいくつかを定義できます。たとえば、XHRリクエストのエラーハンドラーを定義したいとしますが、これらに加えて、次のようなものです。
var bodyparser = require( 'body-parser'); var methodoverride = require( 'method-override'); app.use(bodyparser()); app.use(methodoverride()); app.use(app.router); app.use(logerrors); app.use(clienterrerorhandler); app.use(erroredhandler);
より多くの一般的なlogerrorsでは、stderr、loggly、または同様のサービスにリクエストとエラーメッセージを書くことができます。
function logerrors(err、req、res、next){console.error(err.stack); next(err);}ClientErrorHandlerの定義を以下に示します。このエラーは次のエラーに明示的に渡されることに注意してください。
function clienterrorhandler(err、req、res、next){if(req.xhr){res.send(500、{error: 'anthing blew up all'}); } else {next(err); }}次のエラーハンドラーの「オールラウンド」実装は、次のように定義できます。
関数errorhandler(err、req、res、next){res.status(500); Res.Render( 'error'、{error:err});}オンラインでカウントするユーザー
このセクションでは、(小さな)アプリケーションを詳細に説明し、Redisを使用してオンラインのユーザー数を追跡します。最初にパッケージを作成します。 JSONファイルには2つの添付ファイルが含まれています。1つはRedisクライアント用、もう1つはExpress自体用です。また、Redisをラップし、$ Redis-Serverを実行していることを確認してください。
{"name": "app"、 "バージョン": "0.0.1"、 "依存関係":{"express": "3.x"、 "redis": "*"}}次に、アプリケーションとRedisへの接続を作成する必要があります。
var express = require( 'express'); var redis = require( 'redis'); var db = redis.createclient(); var app = express();
次のミドルウェアはオンラインユーザーを追跡します。ここでは、ソートされたセットを使用して、nミリ秒のみかかるRedisでオンラインユーザーを照会できるようにします。メンバーの「オンライン標準」としてタイムスタンプを使用しています。ここでは、通常のユーザーIDの代わりにユーザーエージェント文字列を使用していることに注意してください。
app.use(function(req、res、next){var ua = req.headers ['user-agent']; db.zadd( 'online'、date.now()、ua、next);});次のミドルウェアは、最後の瞬間にZrevrangeByscoreを使用して最大数のオンラインユーザーを取得することです。常に最新のオンラインユーザーを獲得し、彼の上限は現在のタイムスタンプから60000ミリ秒を引いたものです。
app.use(function(req、res、next){var min = 60 * 1000; var ago = date.now() - min; db.zrevrangebyscore( 'online'、 '+inf'、ago、function(err、users){if(err)return(err); req.online = users; next();};});最後に、URLを介して使用してポートにバインドします!これで、新しいブラウザでこのアプリにアクセスすると、オンラインで人数が増加することがわかります。
app.get( '/'、function(req、res){res.send(req.online.length + 'users online');}); app.listen(3000);Expressの逆プロキシ
ワニスやnginxなどのリバースプロキシの背後にあるエクスプレスを使用するのは些細なことですが、構成が必要です。 「信頼プロキシ」設定App.Enable(「Trust Proxy」)を有効にすることにより、Expressには逆プロキシのためのいくつかのトリックがあり、X-Forwarded-*ヘッダーフィールドは信頼できる場合があります。
この設定を有効にするには、いくつかの微妙な効果があります。 1つ目は、X-Forward-ProtoがReverse Proxyによって設定され、アプリにHTTPまたは単なるHTTPであることを伝えることができることです。この値は、req.protocolに反映されます。
2番目の変更は、Req.ipおよびReq.Ipsの値がX-Forwarded-Forアドレスのリストに記入されることです。
デバッグエクスプレス
Expressは、デバッグモジュールを内部的に使用して、パスマッチングパターンとアプリケーションパターンに関する情報を記録します。このメッセージを表示するには、デバッグ環境変数を次のように設定するだけで、アプリケーションを開始した後、コンソールにデバッグ情報が表示されます。
$ debug = express:* node ./bin/www
このHello Worldの例を実行すると、以下が印刷されます。
Express:開発モードでのアプリケーションブート +0mSexpress:ルーター定義get /hello.txt +0msexpress:ルーター定義get /hello.txt +1ms
さらに、Expression Exectabal(Generator)によって生成されたプログラムは、デバッグモジュールも使用し、デフォルトのスコープはMy-Application Debug NameSpaceです。
次のコマンドでこれらのデバッグステートメントを有効にすることができます
$ debug = my-application node ./bin/www
デバッグの詳細については、デバッグガイドを参照してください