ホームページ >ウェブフロントエンド >jsチュートリアル >Node.js Web アプリケーション フレームワーク Express 入門ガイド_JavaScript のヒント
1. インストール
2. すぐに始めましょう
Express を使い始める最も早い方法は、次に示すように、実行可能ファイル Express(1) を使用してアプリケーションを生成することです。
アプリを作成します:
3. サーバーを作成します
express.HTTPServer インスタンスを作成するには、createServer() メソッドを呼び出すだけです。 このアプリケーション例に共通して、app.get() を例として、HTTP アクション (HTTP 動詞) に基づいてルーティングを定義できます。
app.get('/', function(req, res){
res.send('hello world');
});
app.listen(3000);
4. HTTPS サーバーを作成します
上記のように、express.HTTPSServer インスタンスを初期化します。次に、https ドキュメントで説明されているキー、証明書、その他 (プロパティ/メソッド) を受け入れる構成オブジェクトを渡します。
5. 構成
Express は、実稼働や開発など、あらゆる環境をサポートします。開発者は、configure() メソッドを使用して、現在必要な環境を設定できます。 configure() の呼び出しに環境名が含まれていない場合は、指定されたコールバックがすべての環境で実行されます。
注釈: application.js の app.configure に示されているように、production /development / stage などのエイリアスを自分で選択できます。実際の使用例は以下を参照してください。
次の例では、開発フェーズ中に dumpExceptions (エラーをスロー) のみを発生させ、スタック例外を返します。ただし、どちらの環境でも、methodOverride と bodyParser を使用します。 app.router の使用に注意してください。また、app.get()、app.post() などへの最初の呼び出しは、プログラムのルートをロード (マウント) するために使用できます。ルートもロードします。
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());
});
注釈: 設定の詳細については、application.js の app.set を参照してください。
app.enable('some feature');
// 以下と同等: app.set('some feature', true);
app.disable('some feature');
// 以下と同等: app.set('some feature', false);
app.enabled('some feature')
// => false
});
6. 設定
Express は、次のすぐに使える設定をサポートしています:1.basepath は、マウントされたアプリを明示的に処理する res.redirect() に使用されるアプリケーションのベース パスです。
2.view View は、CWD/views のデフォルトのルート ディレクトリです。
3.view エンジン。デフォルトの View エンジン処理 (View files) では、サフィックスを使用する必要はありません
4.view キャッシュ View キャッシュを有効にする (運用段階で有効になります)
5.charet エンコーディングを変更します。デフォルトは utf-8
6.大文字と小文字を区別するルートは、ルーティングで大文字と小文字を区別します
7.strit ルーティング (ルーティングで) 有効にした後は、末尾の / は無視されません (注釈: app.get('/sofish ') および app.get('/ sofish/') は異なります)
8.json コールバックにより res.send() / res.json() の明示的な jsonp サポート (透過的な jsonp サポート) が有効になります
7. ルーティング
Express は、HTTP アクションを使用して、有益で表現力豊かなルーティング API のセットを提供します。たとえば、パス /user/12 のアカウントを処理したい場合は、次のようにルートを定義できます。名前付きプレースホルダーに関連付けられた値には、req.params を使用してアクセスできます。"/users/:id?"
/users/5
/users
"/files/*"
/files/jquery.js
/files/javascripts/jquery.js
"/file/*.*"
/files/jquery.js
/files/javascripts/jquery.js
"/user/:id/:operation?"
/user/1
/user/1/edit
"/products.:format"
/products.json
/products.xml
"/products.:format?"
/products.json
/products.xml
/products
"/user/:id.:format?"
/user/12
/user/12.json
app.use(express.bodyParser());
app.post('/', function(req, res){
res.send(req.body);
});
app.listen(3000);
8. 追い越しルート制御
3 番目のパラメータである next() 関数を呼び出すことで、次に適応されるルートを制御できます。アダプターが見つからない場合、制御は Connect に戻され、use() に追加された順序でミドルウェアが呼び出されます。同じ原則が、同じパスに定義された複数のルートに適用され、そのうちの 1 つが next() を呼び出さずにリクエストに応答することを決定するまで、それらのルートが順番に呼び出されます。
app.get('/users', function(req, res){
// 何か他のことを行います
});
var users = [{ name: 'tj' }];
app.all('/user/:id/:op?', function(req, res, next){
req.user = users[req.params.id];
if (req .user) {
next();
} else {
next(new Error('cannot find user ' 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('editing ' 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. ミドルウェア
通常、使用される Connect ミドルウェア (プロパティ) は、通常の Connect サーバーの 1 つに付属しており、express.createServer() に渡されます。例:
var app =express.createServer(
express.logger()
,express.bodyParser()
);
app.get('/*', function(req, res, next){
downloads[file] = downloads[file] || 0;
ダウンロード[ファイル] ;
next();
});
ルーティングでは、ルーター ミドルウェアを使用して、複数のコールバック関数 (または配列) をそのメソッドに渡すことができます。この機能は、アクセスの制限、ルーティング経由のデータのダウンロードなどに最適です。
通常、非同期データの取得は次の例のようになります。:id パラメーターを使用してユーザーのロードを試みます:
app.get('/user/:id',loadUser,function(req, res){
res.send('表示ユーザー ' req.user.name);
});
app.get('/user/:id/edit',loadUser,andRestrictToSelf,function(req, res){
res.send('編集中のユーザー ' req.user.name);
} );
app.del('/user/:id',loadUser,andRestrictTo('admin'),function(req, res){
res.send('削除されたユーザー ' req.user.name);
});
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(){});
残りのルーティング ミドルウェアを何度も「スキップ」し、後続のルートの照合を続けたい場合があります。これを行うには、「route」文字列を指定して next() を呼び出すだけです - next('route')。要求された URL に一致するルートが残っていない場合、Express は 404 Not Found を返します。
11. HTTP メソッド
これまでに何度か app.get() に遭遇しました。さらに、Express は app.post()、app.del() などの他の一般的な HTTP アクションも提供します。
POST の一般的な使用例は、フォームの送信です。次にhtmlで投稿するフォームのmethod属性を設定するだけで、以下に定義したルートに制御が移ります。
app.put('/', function(){
console.log(req.body.user);
res.redirect('back');
});
12. エラー処理
Express は、受け取った例外をルートにスローしたり、next(err) に渡したりできるように、app.error() メソッドを提供します。次の例では、特定の NotFound 例外に基づいてさまざまなページを処理します。
NotFound.prototype.__proto__ = Error.prototype;
app.get('/404', function(req, res){
throw new NotFound;
});
app.get('/500', function(req, res){
throw new Error('keyboard cat!');
});
13. ルートパラメータの前処理
暗黙的なデータのロードとリクエストの検証によるルート パラメーターの前処理により、プログラムの可読性が大幅に向上します。たとえば、複数のルートから基本データを継続的に取得する必要があることがよくあります。 /user/:id を使用してユーザーをロードするのと同様に、通常は次のように実行します:
14. ビュー処理
ビュー ファイルは、
次の例では、Jade を使用してindex.html を処理します。 layout: false を使用していないため、index.jade によって処理されたコンテンツは、layout.jade の body という名前のローカル変数に渡されます。
15. ビューコンポーネント
Express のビュー システムには、パーツとコレクションのサポートが組み込まれています。これは、ドキュメントのフラグメントを「ミニ」ビューに置き換えることと同じです。たとえば、ビューにコメントを繰り返し表示するには、ウィジェット セットを使用できます:1.firstInCollection true、最初のオブジェクトの場合
2.indexInCollection コレクター オブジェクトのインデックス
3.lastInCollection true、最後のオブジェクトの場合
4 .collectionLength コレクターの長さオブジェクト
ローカル変数の転送(生成)が優先されます。同時に、親ビューに渡されたローカル変数は子ビューにも適用されます。たとえば、partial('blog/post', post) を使用してブログ投稿をレンダリングすると、この関数を呼び出すビューにローカル変数 user が生成され、これも有効になります。ブログ/投稿用。 (注釈: ここでの部分的は、php の include メソッドに似ています)。
注: 長さ 100 のウィジェット コレクション配列をレンダリングすることは、100 個のビューを処理する必要があることに相当します。単純なコレクションの場合は、過度のオーバーヘッドを避けるために、ウィジェット コレクターを使用するのではなく、組み込みを繰り返すことをお勧めします。
16. 検索を表示
ビューの検索は、親ビュー (パス) に対して相対的に実行されます。たとえば、views/user/list.jade というビュー ページがあり、その中に Partial('edit') が記述されているとします。 view/user/edit.jade をロードします。同様に、partial('../messages') は views/messages.jade をロードします。
View システムはテンプレートのインデックス作成もサポートしているため、ビューと同じ名前のディレクトリを使用できます。たとえば、ルートでは、res.render('users') は views/users.jade (views/users/index.jade) を返します。 (注釈: 最初に
上記のビュー インデックスを使用する場合、partial('users') を使用してビューと同じディレクトリにある views/users/index.jade を参照します。同時に、ビュー システムは ../ のインデックスを作成しようとします。ユーザー/インデックス。partial('users') を呼び出す必要はありません。
17. テンプレートエンジン
Express で最も一般的に使用されるテンプレート エンジンは次のとおりです:
1.Haml: haml 実装
2.Jade: haml.js の後継
3.EJS: 埋め込み JavaScript
4.CoffeeKup: CoffeeScript に基づくテンプレート
5.jQuery テンプレート
18. セッションサポート
セッションのサポートは、Connect のセッション ミドルウェアを使用して取得できます。このためには、通常、Cookie データを解析して req.cookies に保存する cookieParser ミドルウェアをその前に追加する必要があります。
app.post('/add-to-cart', function(req, res){
// フォームを通じて複数のアイテムを POST する場合があります
// (場合によっては bodyParser() を使用します) )
var items = req.body.items;
req.session.items = items;
res.redirect('back');
});
app.get('/add-to-cart', function(req, res){
// 返されると、ページは GET /add-to-cart
// 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');
});
19. アップグレードガイド
Express 1.x を使用している学生の場合、サポートを向上させるために 2.x にアップグレードする必要がある重要なプログラムがある場合は、公式の非常に詳細な移行ガイド : http://expressjs を参照してください。 com/guide.html#migration-guide