1。インストール
次のようにコードをコピーします:$ npmインストールExpress
または、実行可能なExpress(1)を使用してインストールしてください。
コードを次のようにコピーします:/#翻訳者注:この方法は強くお勧めします
$ npmインストール-Gエクスプレス
2。すぐに始めましょう
Expressを始める最速の方法は、以下に示すように、実行可能なExpress(1)を使用してアプリケーションを生成することです。
アプリを作成する:
コードコピーは次のとおりです。
$ npmインストール-Gエクスプレス
$ Express /TMP /foo && cd /tmp /foo
依存関係パッケージをインストールします:
コードコピーは次のとおりです。
$ npmインストール-d
サーバーを開始します:
コードコピーは次のとおりです。
$ node app.js
3.サーバーを作成します
Express.httpserverインスタンスを作成するには、createServer()メソッドを呼び出すだけです。このアプリケーションの例では、httpアクション(http動詞)に基づいてルートを定義し、app.get()を例として取得できます。
コードコピーは次のとおりです。
var app = require( 'express')。createServer();
app.get( '/'、function(req、res){
res.send( 'hello world');
});
app.listen(3000);
4. HTTPSサーバーを作成します
上記のようにExpress.httpsServerインスタンスを初期化します。次に、HTTPSドキュメントで言及されているキー、証明書、およびその他(プロパティ/メソッド)を受け入れ、構成オブジェクトを渡します。
コードコピーは次のとおりです。
var app = require( 'express')。createServer({key:...});
V.構成
Expressは、製品段階や開発段階などのあらゆる環境をサポートします。開発者は、configure()メソッドを使用して、現在の必要な環境を設定できます。 configure()への呼び出しに環境名が含まれていない場合、すべての環境で指定されたコールバックで実行されます。
翻訳者のメモ:Application.jsのapp.configureに示すように、生産/開発/ステージなどのエイリアスはそれ自体で撮影できます。実際の使用については、次の例を参照してください。
次の例では、開発段階でDumpExectectectectections(スローエラー)のみが、スタック例外を返します。ただし、両方の環境では、MethodOverRideとBodyParserを使用しています。 App.routerの使用に注意してください。これは、プログラムのルートをロードするために(オプション)を使用できます。さらに、ルートは、app.get()、app.post()などを初めて呼び出すことによってロードされます。
コードコピーは次のとおりです。
app.configure(function(){
app.use(express.methodoverride());
app.use(express.bodyParser());
app.use(app.router);
});
app.configure( 'development'、function(){
app.use(express.static(__ dirname + '/public'));
app.use(express.errorhandler({dumpexceptions:true、showStack:true}));
});
app.configure( 'production'、function(){
var oneyear = 31557600000;
app.use(express.static(__ dirname + '/public'、{maxage:oneyear}));
app.use(express.errorhandler());
});
同様の環境では、複数の環境文字列を渡すことができます。
コードコピーは次のとおりです。
app.configure( 'stage'、 'prod'、function(){
// config
});
内部設定(#)の場合、Expressはset(key [、val])、enable(key)and disable(key)メソッドを提供します。
翻訳者注:詳細については、application.js app.setを参照してください。
コードコピーは次のとおりです。
app.configure(function(){
app.set( 'views'、__dirname + '/views');
app.set( 'Views');
// => "/absolute/path/to/views"
app.enable( 'Some Feature');
//等価:app.set( 'some feature'、true);
app.disable( 'Some feature');
//等価:app.set( 'some feature'、false);
App.Enabled( 'いくつかの機能')
// => false
});
環境を変更するには、次のようなnode_env環境変数を設定できます。
コードコピーは次のとおりです。
$ node_env = Production node app.js
これは非常に重要です。これは、ほとんどのキャッシュメカニズムが製品段階でのみオンになっているためです。
6。設定
Expressは、次のショートカット設定(箱から出して)をサポートします。
1.Basepathは、マウントされたアプリを明示的に処理するRes.redirect()のアプリケーションベースパスに使用されます。
2.ViewビューデフォルトのルートディレクトリはCWD/ビューです
3.viewエンジンデフォルトビューエンジン処理(ファイルの表示)では、接尾辞の使用を必要としません
4.Viewキャッシュを有効にするキャッシュの表示(製品段階で有効になります)
5.エンコードの変更、デフォルトはUTF-8です
6.ケースに敏感なルートケースに敏感なルート
7.ストリットルーティングが有効になった後(ルート内で)終了/無視されません(翻訳注:つまり、app.get( '/sofish')とapp.get( '/sofish/')は異なります)
8.JSONコールバックはres.send() / res.json()明示的なJSONPサポート(透明なJSONPサポート)を有効にします
7。ルーティング
ExpressはHTTPアクションを使用して、一連のプロンプトで表現力豊かなルーティングAPIを提供します。たとえば、 /user /12のパスでアカウントを扱う場合は、次のようにルートを定義できます。指定されたプレースホルダーに関連付けられた値は、Req.Paramsがアクセスできます。
コードコピーは次のとおりです。
app.get( '/user/:id'、function(req、res){
res.send( 'user' + req.params.id);
});
ルートは、通常の通常にコンパイルされる文字列です。たとえば、 /user /:IDがコンパイルされている場合、正規表現の簡略化されたバージョンは次のようになります。
コードコピーは次のとおりです。
//公式文字列を変更します
///ユーザー//([^//]+)//?/
正規表現を渡すことができ、複雑なシナリオに適用できます。文字通りの正規表現によってキャプチャされたコンテンツグループは匿名であるため、Req.Paramsを介して直接アクセスする場合があります。したがって、キャプチャする最初のコンテンツのセットはreq.params [0]になり、2番目のセットの後にreq.params [1]が続きます。
コードコピーは次のとおりです。
app.get(/^// users?(?://(/d+)(?:/./。(/d+))?/、function(req、res){
res.send(req.params);
});
上記の定義されたルートのカール要求:
コードコピーは次のとおりです。
$ curl http:// dev:3000/user
[ヌル、ヌル]
$ curl http:// dev:3000/users
[ヌル、ヌル]
$ curl http:// dev:3000/users/1
["1"、ヌル]
$ curl http:// dev:3000/users/1..15
["1"、 "15"]
以下は、使用する可能性のあるパスに関連付けられたルートの例をいくつか紹介します。
コードコピーは次のとおりです。
"/ユーザーID"
/ユーザー/12
「/users/:id?」
/ユーザー/5
/ユーザー
「/files/*」
/files/jquery.js
/files/javascripts/jquery.js
"/ファイル/*。*"
/files/jquery.js
/files/javascripts/jquery.js
「/user/:id/:操作?」
/ユーザー/1
/ユーザー/1/編集
"/products.:Format"
/products.json
/products.xml
「/products.:Format?」
/products.json
/products.xml
/製品
"/user/:id.:Format?"
/ユーザー/12
/user/12.json
たとえば、Postを使用してJSONデータを送信し、JSONリクエストコンテンツ(またはその他のコンテンツ)を解析してデータを返すことができるミドルウェアであるBodyParserを使用し、Req.Bodyにリターン結果を保存できます。
コードコピーは次のとおりです。
var Express = require( 'Express')
、app = Express.createserver();
app.use(express.bodyParser());
app.post( '/'、function(req、res){
res.send(req.body);
});
app.listen(3000);
通常、ユーザー/:IDのような「Fool」スタイルのプレースホルダーを使用できます。ただし、たとえば、ユーザーIDを番号のみに制限する場合は、 /user /:id([0-9]+)を使用する場合があります。
8。ルート制御の合格
3番目のパラメーターである次()関数を呼び出すことにより、次の適応ルートを制御できます。適応が見つからない場合、コントロールが接続に渡され、使用()に追加された順序でミドルウェアが順番に呼び出されます。この原則は、同じパスに定義された複数のルートにも適用され、そのうちの1つがNext()を呼び出してリクエスト応答を行うことを決定するまで、それらは順番に呼び出されます。
コードコピーは次のとおりです。
app.get( '/users/:id?'、function(req、res、next){
var id = req.params.id;
if(id){
//何かをします
} それ以外 {
次();
}
});
app.get( '/users'、function(req、res){
//他のことをします
});
App.All()メソッドは、1回呼び出すことにより、すべてのHTTPアクションに同じロジックを簡単に転送できます。次に、それを使用して、擬似データからユーザーを抽出し、req.userに割り当てます。
コードコピーは次のとおりです。
var Express = require( 'Express')
、app = Express.createserver();
var users = [{name: 'tj'}];
app.all( '/user/:id/:op?'、function(req、res、next){
req.user = users [req.params.id];
if(req.user){
次();
} それ以外 {
next(new Error( 'ユーザーを見つけられない' + req.params.id));
}
});
app.get( '/user/:id'、function(req、res){
res.send( 'viewing' + req.user.name);
});
app.get( '/user/:id/edit'、function(req、res){
res.send( '編集' + req.user.name);
});
app.put( '/user/:id'、function(req、res){
res.send( 'updating' + req.user.name);
});
app.get( '*'、function(req、res){
res.send(404、 'what ???');
});
app.listen(3000);
9。ミドルウェア
使用されるコネクトミドルウェア(プロパティ)には、通常、Express.createServer()に渡される通常の接続サーバーが添付されます。のように:
コードコピーは次のとおりです。
var Express = require( 'Express');
var app = express.createServer(
Express.logger()
、Express.BodyParser()
);
さらに、configure()ブロック - このプログレッシブパレス(翻訳者のメモ:笑い^^、プログレッシブな方法で)内で、使用()を使用してミドルウェアを追加することもできます。
コードコピーは次のとおりです。
app.use(express.logger({format: ':method:url'}));
通常、このように、connectミドルウェアを使用する( 'connect')を使用する可能性があります。
コードコピーは次のとおりです。
var connect = require( 'connect');
app.use(connect.logger());
app.use(connect.bodyParser());
これはある程度不快であるため、これらのミドルウェアのプロパティを再輸出しますが、同じですが、次のように表現しています。
コードコピーは次のとおりです。
app.use(express.logger());
app.use(express.bodyParser());
ミドルウェアの順序は非常に重要です。 Connectがリクエストを受信すると、createServer()またはuse()に渡す最初のミドルウェアには、3つのパラメーター、リクエスト、応答、およびコールバック関数(通常)が添付されます。 Next()が呼び出されると、2回目のミドルウェアターンなどになります。多くのミドルウェアが互いに依存しているため、これは注目に値します。たとえば、MethodOverride()は、HTTPメソッドの過負荷を検出するためにReq.Bodyメソッドをクエリします。一方、BodyParser()は要求されたコンテンツを解析し、Req.Bodyに保存します。別の例は、Cookieの解析とセッションのサポートです。最初に()cookieparser()を使用し、次にsession()を使用する必要があります。
多くのエクスプレスアプリケーションには、そのようなapp.use(app.router)の行が含まれていますが、少し奇妙に思えるかもしれません。実際、それはすべての定義されたルーティングルールを含み、既存のURL要求とHTTPメソッドに基づいてルーティング検索を実行するミドルウェア関数にすぎません。 Expressを使用すると、その位置を決定できますが、デフォルトでは下部に配置されます。ルートの位置を変更することにより、ミドルウェアの優先度を変更できます。たとえば、エラーレポートを最後のミドルウェアとして使用して、next()に渡される例外を処理できるようにします。または、静的ファイルサービスが優先度を低くして、ルートが単一の静的ファイルリクエストなどのダウンロードをリッスンできるようにすることを望みます。これは次のようになります。
コードコピーは次のとおりです。
app.use(express.logger(...));
app.use(express.bodyParser(...));
app.use(Express.CookieParser(...));
app.use(express.session(...));
app.use(app.router);
app.use(express.static(...));
app.use(express.errorhandler(...));
最初に、NodeのReq.End()メソッドを含む可能性のあるLogger()を追加し、応答時間にデータを提供します。リクエストのコンテンツが解析され(データがある場合)、Cookieの解像度とセッションサポートが続きます。同時に、app.routerのルートがトリガーされたときに、req.sessionが定義されます。現時点では、next()を呼び出さないため、static()ミドルウェアはこのリクエストについて知りません。次のルートが定義されている場合、さまざまな状態を記録し、ダウンロードを拒否し、ダウンロードポイントなどを消費できます。
コードコピーは次のとおりです。
var downloads = {};
app.use(app.router);
app.use(express.static(__ dirname + '/public'));
app.get( '/*'、function(req、res、next){
var file = req.params [0];
ダウンロード[ファイル] =ダウンロード[ファイル] || 0;
ダウンロード[ファイル] ++;
次();
});
10。ミドルウェアのルーティング
ルーティングは、ルーターミドルウェアを使用して、複数のコールバック関数(または配列)をそのメソッドに渡すことができます。この機能は、アクセスの制限、ルーティングによるデータのダウンロードなどに非常に有益です。
通常、非同期データ検索は次の例のように見える場合があります。IDパラメーターを使用して、ユーザーをロードしてみてください。
コードコピーは次のとおりです。
app.get( '/user/:id'、function(req、res、next){
loaduser(req.params.id、function(err、user){
if(err)return next(err);
res.send( 'viewing user' + user.name);
});
});
乾燥した原理を確保し、読みやすさを改善するために、このロジックをミドルウェアに適用できます。以下に示すように、このロジックをミドルウェアに抽象化することで、ルーティングのシンプルさを確保しながら再利用できます。
コードコピーは次のとおりです。
function loaduser(req、res、next){
// DBからユーザーを取得します
var user = users [req.params.id];
if(user){
req.user = user;
次();
} それ以外 {
next(new Error( 'ユーザーのロードに失敗しました' + req.params.id));
}
}
app.get( '/user/:id'、loaduser、function(req、res){
res.send( 'viewing user' + req.user.name);
});
ユーザーアカウントへのアクセスを制限するなど、複数のルーティングをより深いロジック層に適用できます。次の例では、認証に合格したユーザーが(彼女の)アカウントを編集することができます。
コードコピーは次のとおりです。
関数andRestrictToself(req、res、next){
req.authenticeduser.id == req.user.id
?次()
:next(new Error( 'Unauthorized'));
}
app.get( '/user/:id/edit'、loaduser、andrestricttoself、function(req、res){
res.send( 'editing user' + req.user.name);
});
以下に示すように、ルーティングは単純な機能であることを常に覚えておいてください。ミドルウェアを返す機能を定義して、より表現力豊かで柔軟なソリューションを作成できます。
コードコピーは次のとおりです。
function andRestrictto(役割){
return function(req、res、next){
req.authenticedsuser.role ==役割
?次()
:next(new Error( 'Unauthorized'));
}
}
app.del( '/user/:id'、loaduser、andrestrictto( 'admin')、function(req、res){
res.send( '削除されたユーザー' + req.user.name);
});
一般的に使用されるミドルウェア「スタック」は、アレイ(再帰的に適用される)に渡すことができます。これは、任意の程度に混合して一致させることができます。
コードコピーは次のとおりです。
var a = [middleware1、middleware2]
、b = [Middleware3、Middleware4]
、すべて= [a、b];
app.get( '/foo'、a、function(){});
app.get( '/bar'、a、function(){});
app.get( '/'、a、middleware3、middleware4、function(){});
app.get( '/'、a、b、function(){});
app.get( '/'、all、function(){});
このインスタンスの完全なコードについては、ルートミドルウェアの例リポジトリを参照してください。
残りのルーティングミドルウェアを「スキップ」し、後続のルートと一致させ続けることができます。これを行うには、「ルート」文字列 - 次の(「ルート」)でnext()を呼び出す必要があります。残りのルートが要求されたURLに一致しない場合、Expressは見つかりません404を返します。
11。HTTPメソッド
これまでのところ、私は何度かapp.get()にさらされてきました。さらに、Expressは、app.post()、app.del()など、他の一般的なHTTPアクションも提供します。
投稿の使用の一般的な例は、フォームを送信することです。次に、フォームのメソッド属性をHTMLに投稿するように設定するだけで、コントロールは以下に定義されているルートに割り当てられます。
コードコピーは次のとおりです。
<form method = "post" action = "/">
<入力型= "text" name = "user [name]" />
<入力型= "テキスト" name = "user [email]" />
<入力型= "submit" value = "submit" />
</form>
デフォルトでは、Expressはこのリクエストのコンテンツを処理する方法を知らないため、BodyParserミドルウェアを追加する必要があります。これにより、アプリケーション/X-WWW-Form-UrlenCodedおよびApplication/JSONリクエストのコンテンツが解析され、Req.Bodyに変数が保存されます。次の例のように、このミドルウェアを使用できます。
コードコピーは次のとおりです。
app.use(express.bodyParser());
次のように、私たちのルートはReq.body.userオブジェクトにアクセスでき、名前と電子メールが定義されると、これら2つのプロパティが含まれます(翻訳注:フォームで送信されたコンテンツが空でない場合)。
コードコピーは次のとおりです。
app.post( '/'、function(req、res){
console.log(req.body.user);
res.redirect( 'back');
});
フォームのようなメソッドを使用する場合は、_methodという名前の隠し入力を使用できます。これは、HTTPメソッドを変更するために使用できます。これを行うには、最初にMethodOverRideミドルウェアが必要です。これは、そのreq.bodyに含まれるフォーム値を使用するためにBodyParserの後に表示する必要があります。
コードコピーは次のとおりです。
app.use(express.bodyParser());
app.use(express.methodoverride());
これらのメソッドがデフォルトで所有されていないのはなぜですか?簡単に言えば、それはExpressが必要とする完全な機能に必要ではないからです。メソッドの使用はアプリケーションに依存し、それらを必要としない場合があり、クライアントはPutや削除などのメソッドを使用できます。MethoverRideはフォームに非常に優れたソリューションを提供するため、直接使用できます。 Putの使用方法のデモンストレーションは次のとおりです。
コードコピーは次のとおりです。
<form method = "post" action = "/">
<入力型= "hidden" name = "_ method" value = "put" />
<入力型= "text" name = "user [name]" />
<入力型= "テキスト" name = "user [email]" />
<入力型= "submit" value = "submit" />
</form>
app.put( '/'、function(){
console.log(req.body.user);
res.redirect( 'back');
});
12。エラー処理
Expressは、app.error()メソッドを提供して、受信した例外がルートにスローされるか、次に渡される(err)。次の例では、特定のない例外に基づいて、さまざまなページを処理します。
コードコピーは次のとおりです。
function notfound(msg){
this.name = 'notfound';
error.call(this、msg);
error.capturestacktrace(this、arguments.callee);
}
notfound.prototype .__ proto__ = error.prototype;
app.get( '/404'、function(req、res){
新しいものを投げません。
});
app.get( '/500'、function(req、res){
新しいエラー( 'キーボード猫!')をスローします。
});
以下に説明するように、app.error()を複数回呼び出すことができます。ここでは、不足していないインスタンスを検出し、404ページを表示するか、次のエラーハンドラーに渡します。これらのプロセッサは、聴取()を聞くときにルーティングプロセッサの下に配置されるため、どこでも定義できることは注目に値します。環境に基づいて異なる例外処理方法を使用できるように、configure()ブロック内の定義を可能にします。
コードコピーは次のとおりです。
app.error(function(err、req、res、next){
if(err instance of notfound){
Res.Render( '404.jade');
} それ以外 {
next(err);
}
});
簡単にするために、このデモのすべてのエラーは500であると仮定します。もちろん、好きなものを選択できます。ノードのようなファイルシステムへのシステム呼び出しを実行すると、eNoentのエラー。コードを受信する場合があります。「そのようなファイルまたはディレクトリはありません」を意味します。これは、エラーハンドラーで使用できます。
コードコピーは次のとおりです。
app.error(function(err、req、res){
Res.Render( '500.Jade'、{
エラー:err
});
});
アプリは、ConnectのErrorHandlerミドルウェアを使用して例外を報告することもできます。たとえば、「開発」環境でSTDERR例外を出力する場合は、以下を使用できます。
コードコピーは次のとおりです。
app.use(express.errorhandler({dumpexceptions:true}));
同時に、開発段階では、渡す例外を表示して、派手なHTMLページに投入する必要がある場合があります。
コードコピーは次のとおりです。
app.use(Express.ErrorHandler({showStack:true、dumpexceptions:true}));
ErrorHandlerミドルウェアは、Accept:Application/JSONが存在する場合にJSONを返すこともできます。これは、クライアントJavaScriptに大きく依存するアプリケーションを開発するのに非常に役立ちます。
13。ルートパラメーター前処理
ルーティングパラメーター前処理は、暗黙のデータの読み込みと要求の確認により、プログラムの読みやすさを大幅に改善できます。たとえば、通常、複数のルートから基本データを継続的に取得する必要があります。たとえば、 /user /:idでユーザーをロードすると、これを行う場合があります。
コードコピーは次のとおりです。
app.get( '/user/:userid'、function(req、res、next){
user.get(req.params.userid、function(err、user){
if(err)return next(err);
res.send( 'user' + user.name);
});
});
プリプロセシングを通じて、パラメーターは、データベースからデータを実行、制御、さらにはロードするコールバックにマッピングできます。次のように、パラメーター名でapp.param()を呼び出し、それをいくつかのミドルウェアにマッピングすることを望んでいます。ご覧のとおり、プレースホルダー値を表すIDパラメーターを受け入れます。これを使用して、ユーザーを通常どおりロードしてエラーを処理し、次のプリプロセッサまたはルーティングプロセッサへのコントロールを引き渡すだけです。
コードコピーは次のとおりです。
app.param( 'userid'、function(req、res、next、id){
user.get(id、function(err、user){
if(err)return next(err);
if(!user)return next(new Error( 'ユーザーを見つけられなかった'));
req.user = user;
次();
});
});
これが完了すると、上記はルートの読みやすさを大幅に改善し、プログラム全体でロジックを簡単に共有できるようになります。
コードコピーは次のとおりです。
app.get( '/user/:userid'、function(req、res){
res.send( 'user' + req.user.name);
});
14。処理を表示します
ビューファイルは、<name>の形式<name>。<エンジン>を使用します。ここで、<エンジン>は必要なモジュールの名前です。たとえば、layout.ejsはビューシステムに要求するように指示し、ロードされたモジュールはexports.compile(str、options)メソッドを(export)(export)、expressに適応する関数を返す必要があります。 app.register()を使用して、このデフォルトの動作を変更して、ファイル拡張子を特定のエンジンにマッピングできます。たとえば、「foo.html」はEJSで処理できます。
次の例では、Jadeを使用してindex.htmlを処理します。レイアウトを使用しないため:false、index.jadeで処理されたコンテンツは、レイアウトでボディと呼ばれるローカル変数に渡されます。
コードコピーは次のとおりです。
app.get( '/'、function(req、res){
Res.Render( 'index.jade'、{title: 'myサイト'});
});
新しいビューエンジン設定を使用すると、たとえばJadeを使用する場合、次のように設定できます。たとえば、デフォルトのテンプレートエンジンを指定できます。
コードコピーは次のとおりです。
app.set( 'View Engine'、 'Jade');
これを処理できるようにしてください:
コードコピーは次のとおりです。
res.Render( 'index');
対応:
コードコピーは次のとおりです。
Res.Render( 'index.jade');
ビューエンジンが設定されている場合、拡張機能はオプションですが、一致するテンプレートエンジンを混ぜることができます。
コードコピーは次のとおりです。
Res.Render( 'Another-Page.Ejs');
Expressはビューオプション設定も提供します。これは、レイアウトを使用したくない場合、レンダリングされるたびにビューに適用されます。
コードコピーは次のとおりです。
app.set( '表示オプション'、{
レイアウト:false
});
これは、必要に応じてres.render()コール内で過負荷にすることができます。
コードコピーは次のとおりです。
Res.Render( 'myview.ejs'、{layout:true});
レイアウトを変更する必要がある場合、通常、別のパスを指定する必要があります。たとえば、View EngineをJadeに設定し、ファイルに名前が付けられている場合。
コードコピーは次のとおりです。
res.Render( 'page'、{layout: 'mylayout'});
それ以外の場合は、翻訳者のメモ:ビューエンジンがジェイドや他のエンジンに設定されていない場合)、拡張機能を指定する必要があります。
コードコピーは次のとおりです。
res.Render( 'page'、{layout: 'mylayout.jade'});
また、絶対的なパスになることもあります。
コードコピーは次のとおりです。
res.Render( 'page'、{layout:__dirname + '/../../mylayout.jade'});
これには良い例があります - EJのスタートとクローズタグをカスタマイズします。
コードコピーは次のとおりです。
app.set( '表示オプション'、{
開ける: '{{'、
近い: '}}'
})
15.パーツを表示します
Expressのビューシステムには、ドキュメントフラグメントを「ミニ」ビューに置き換えることに相当する部品とコレクションのサポートが組み込まれています。たとえば、コメントを表示するために繰り返しレンダリングすると、部品セットを使用できます。
コードコピーは次のとおりです。
partial( 'comment'、{collection:comments});
他のオプションやローカル変数が必要ない場合は、オブジェクト全体を省略して、上記に相当する配列に渡すだけです。
コードコピーは次のとおりです。
partial( 'comment'、comments);
使用中、コンポーネントセットは、ローカル変数の「魔法」サポートを無料で提供します。
1.最初のオブジェクトである場合は、firstincollection trueです
2。コレクションオブジェクトのインデックスインクレクション
3. lastincollection true、それが最後のオブジェクトである場合
4.CollectionLengthコレクションオブジェクトの長さ
ローカル変数の転送(生成)は優先度が高くなります。同時に、親ビューに渡されたローカル変数も子供に適しています。たとえば、Partial(「ブログ/投稿」、投稿)を使用してブログ投稿をレンダリングすると、ポストローカル変数が生成されます。この関数を呼び出すローカル変数ユーザーがあり、ブログ/投稿にも有効です。 (翻訳者のメモ:ここでは、PartialはPHPに含まれるメソッドに似ています)。
注:部品コレクションを慎重に使用し、長さ100の部品コレクションの配列をレンダリングすることは、処理する必要がある100ビューに相当します。簡単なコレクションの場合、過度のオーバーヘッドを避けるためにコンポーネントコレクターを使用するのではなく、組み込みを繰り返すことが最善です。
16。検索を表示します
ビュー検索は、親ビュー(パス)に対して実行されます。 Views/user/list.hade.hade、およびpartial( 'edit')というビューページが内部に書かれている場合、ビュー/ユーザー/編集をロードしようとします。
ビューシステムはテンプレートのインデックス作成もサポートしているため、ビューと同じ名前のディレクトリを使用できます。たとえば、ルートでは、res.render( 'users')がnonviews/users.jade、つまりviews/users/index.jadeを取得します。 (翻訳者のメモ:最初に<path>。<engine>の状況を処理し、次に<path>/<インデックスの状況を処理します。
上記のビューインデックスを使用する場合、Partial( 'users')を使用して、ビューと同じディレクトリのViews/users/index.hadeを参照します。同時に、ビューシステムは、Partial( 'users)を呼び出すことなく、../ユーザー/インデックスのインデックスを作成しようとします。
17。テンプレートエンジン
以下は、Expressのために最も一般的に使用されるテンプレートエンジンです。
1.Haml:Hamlの実装
2.Jade:haml.js後継者
3.EJS:埋め込まれたJavaScript
4.Coffeekup:Coffeescriptベースのテンプレート
5.JQUERYテンプレート
18。セッションサポート
Connectのセッションミドルウェアを使用して、セッションサポートを取得できます。このため、通常、req.cookiesのクッキーデータを解析および保存するCookieparserミドルウェアで序文を序文する必要があります。
コードコピーは次のとおりです。
app.use(express.cookieparser());
app.use(express.session({secret: "keyboard cat"}));
デフォルトでは、セッションミドルウェアはConnectの組み込みメモリストレージを使用しますが、他にも多くの実装があります。たとえば、Connect-RedisはRedisセッションストレージを提供します。これは次のように使用できます。
コードコピーは次のとおりです。
var redisstore = require( 'connect-redis')(express);
app.use(express.cookieparser());
app.use(express.session({secret: "keyboard cat"、store:new Redisstore}));
この時点で、req.sessionとreq.sessionstoreプロパティは、すべてのルートとその後のミドルウェアで使用されます。 req.sessionのすべてのプロパティは、たとえばショッピングカートにデータを追加する場合など、応答で自動的に保存されます。
コードコピーは次のとおりです。
var redisstore = require( 'connect-redis')(express);
app.use(express.bodyParser());
app.use(express.cookieparser());
app.use(express.session({secret: "keyboard cat"、store:new Redisstore}));
app.post( '/add-to-cart'、function(req、res){
// 1つのフォームを介して複数のアイテムを投稿する場合があります
//(場合によっては、BodyParser()ミドルウェアが使用されます)
var items = req.body.items;
req.session.items = items;
res.redirect( 'back');
});
app.get( '/add-to-cart'、function(req、res){
//返すとき、ページを取得 /カートに追加します
// req.session.items && req.session.items.lengthを確認できます
//プロンプトを印刷します
if(req.session.items && req.session.items.length){
req.notify( 'info'、 'あなたはカートに%sアイテムがあります'、req.session.items.length);
}
Res.Render( 'Shopping-Cart');
});
Req.Sessionの場合、セッション#touch()、セッション#Destroy()、セッション#Regenerate()などのメソッドもあり、セッションを維持および運用します。詳細については、Connectセッションのドキュメントを参照してください。
19。アップグレードガイド
Express 1.xを使用している学生の場合、より良いサポートのために2.xにアップグレードする必要がある重要なプログラムがある場合は、公式の非常に詳細な移行ガイド:http://expressjs.com/guide.html#migration-guideを参照してください