誰もが私の一連の記事を読み続けることを願っています。これは私にとっても最大の励ましとサポートです。一緒に進歩し、文学を通して友達を作り、お互いを助けましょう。さて、今日のトピックに直接行きましょう。
「接続」とは何ですか?また、ミドルウェアを理解する方法は何ですか?今日の記事をご覧ください。
「ミドルウェア」を理解する方法は?
私の理解では、ミドルウェアはフィルターに似たものであり、クライアントとアプリケーションの間のリクエストと応答を処理する方法です。
HTTP処理プロセスが下水処理と比較される場合、ミドルウェアはフィルターの層のようなものです。各ミドルウェアは、HTTP処理中にリクエストまたは(および)応答データを書き換えます。
状態、特定の関数を実装します。
「接続」とは何ですか?
Connectは、ミドルウェアの束のコレクションと考えることができます。各要求に対して、Connectはミドルウェアレイヤーを使用してリクエストをフィルタリングし、それぞれがHTTP要求を取得できます。
TJ Holowaychukは、Connectは2種類のミドルウェアがあると述べました。それらの1つはフィルターです:
フィルターはリクエストを処理しますが、リクエストに応答しません(サーバーログを考えてください)。
2番目のタイプはプロバイダーで、リクエストに応答します。ニーズに応じて複数のミドルウェアを使用できます。 HTTP要求は、ミドルウェアの1つまで各ミドルウェアを介してリクエストに応答します。
2。接続の組み込みミドルウェアの紹介
以下はいくつかのメインミドルウェアと例について説明します。
(1), cookieParser---------------------------------------------------------------------------------------------------------------------- Cookies can also be encrypted via req.secret.
コードコピーは次のとおりです。
var connect = require( './ lib/connect');
var app = connect()
.use(connect.cookieparser( 'Secret String'))
.use(function(req、res、next){
req.cookies.website = "こんにちは、私はbigbearです!" ;
res.End(json.Stringify(req.cookies));
})。聞きます(8888);
(2)、セッション
説明:セッション管理ミドルウェア
依存関係:CookieParser
パラメーター:オプション
オプション:
キー:Cookies名、デフォルト値はconnect.sidです
ストア:セッションストレージインスタンス
秘密:セッションクッキー暗号化
Cookie:セッションのCookie構成、デフォルト値は{path: '/'、httponly:true、maxage:null}です
プロキシ:X-Forwarded-Protoを通じて実装されたセキュアCookieの逆プロキシ
クッキーオプション:
Cookie.Maxage:デフォルト値はnullであり、ブラウザが閉じているときにCookieが削除されていることを示します。
コードコピーは次のとおりです。
var connect = require( './ lib/connect');
var app = connect()
.use(connect.logger( 'dev'))
.use(connect.cookieparser())
.use(connect.session({secret: '123'、cookie:{maxage:60000}}))))
.use(function(req、res、next){
if(req.session.pv){
res.setheader( 'content-type'、 'text/html');
res.write( 'ビュー:' + req.session.pv);
res.end();
req.session.pv ++;
}それ以外{
req.session.pv = 1;
res.End( 'REFRESH');
}
})
.Listen(8888);
クライアントがページ「PV」を継続的に再表示すると、サーバー側のメンテナンス数「セッション」が増加し続けます。
(3), bodyParser-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
コードコピーは次のとおりです。
var connect = require( 'connect');
var app = connect()
.use(connect.bodyparser())
.use(function(req、res){
res.End( 'req.body =>' + json.stringify(req.body));
})
.Listen(8888);
第三に、比較の例を見て、ミドルウェアを使用することの利点を見てみましょう。
コードコピーは次のとおりです。
/*
* Connectを使用して実装された静的ファイル処理
*/
var connect = require( 'connect');
connect(connect.static(__ dirname + '/public」).listen(//listen
8888、
関数() {
console.log( 'connectはポート8888で開始');
}
);
/*
*ノードネイティブAPIを使用した実装
*/
var http = require( 'http');
http.createserver(
function(req、res){
var url = require( 'url');
var fs = require( 'fs');
var pathname = __dirname + '/public' + url.parse(req.url).pathname;
//ローカルファイルを読み取ります
fs.readfile(
PathName、
function(err、data){
//例外処理
if(err){
res.writehead(500);
res.End( '500');
}
それ以外 {
res.End(data);
}
}
);
}
).listen(//聞いてください
8888、
関数() {
console.log( 'httpサーバーがポート8888で開始されました');
}
);
ノードネイティブAPIはすでに非常に多くのコードを費やしていますが、処理されていない単純な静的ファイルサーバーの多くの側面を残しています。
たとえば、404およびその他の例外は処理されません。基本的なファイルパスセキュリティ検証はありません(実際、OSファイルシステム全体にアクセスできます)、グローバル例外処理など。
同時に、Connectはすでにこれらすべての問題を処理しています。
4つ、要約しましょう
(1)ミドルウェアのストリーミング処理を理解する。
コードコピーは次のとおりです。
var app = connect();
app.use(connect.staticcache());
app.use(connect.static(__ dirname + '/public'));
app.use(connect.cookieparser());
app.use(connect.session());
app.use(connect.query());
app.use(connect.bodyParser());
app.use(connect.csrf());
app.use(function(req、res、next){
//ミドルウェア
});
app.listen(8888);
(2)ネイティブの実装方法とミドルウェアの実装の区別。
(3)ミドルウェアの上記の例を通じて、使用と使用法のシナリオを理解し、他のミドルウェアの基本的な使用を習得するための関連ドキュメントを参照できます。