原生nodejs学習ノート1
6893 ワード
ネット上の多くのnodejs教程や書簡は第三者モジュールを使ってnodejsアプリケーションを作成するように教えています.これはとても便利ですが、パッケージが厚すぎて、基本的なものはまだ習っていません.人のモジュール、人はどのように変えたいですか?次のバージョンでインターフェースを変えられます.あなたのアプリケーションはもうだめです.例えばgoogleなら、彼はこのようなことが好きです.ですから、私たちは下のAPIをまじめに勉強しましょう.
今回はまずページを教えましょう.
以前から関係のあるものを書きました.node.js簡単なページ出力、皆さんは予習してもいいです.
一般的に、みんなはこのような例から入門します.
上のスクリプトを分析:に依存が導入されました.これは先端AMD仕様が未流行の前に、非常に不思議なものです.ただし、プロジェクトがこんなに大きくて、必ずN個のディレクトリN個のファイルに分けて、各自が一部を担当して、合併衝突のリスクを減らします. require(http)が吐き出すhttpオブジェクトは元のオブジェクトで、フロントエンドのalertに似ています.set Timeoutはよく使われています.このhttpオブジェクトは更にバックエンドの大黒柱であり、WEBアプリケーションはそれから切り離せない. http.creat Server方法は関数を受信し、俗にコールバックと呼ばれる.後であなたはますます多くの回調を見ることができて、nodejsの世界は回調の世界で、nodejsの発展史は回調の抗争史と です.このコールバックは、2つの重要なオブジェクトに送られ、要求対象と応答オブジェクト.reponseは先端にものを出力します.応答ヘッダを設定して、ブラウザに次からどうやって私達の内容を処理するかを教えます.スクリプトとして使うものもありますし、絵として使うものもあります.CSSファイルとして使うものもあれば、添付ファイルとしてダウンロードするものもあります.出力が終わりました.endメソッドを呼び出すには、実際には、レスポンスがendコールを実行するのに便利です. http.creat Serverは、実際にはServerの例を返すための方法であり、あるポートを傍受するためのlistenがあります. ok、これで終わりです.もっと深く入りましょう.(ここは難しいです.スキップできます.直接に次の★を見ます.)
ここですを開けて、httpモジュールのソースコードを調べてみます.大体呼び出しました.
httpソースを削除します.皆さんは何を分かりますか?
★★★またシンプルモードに切り替えます.上記の話を理解すると、私たちはなぜ「http.ServerResonse」と「http.IncompingMessage」を重点的に勉強しなければならないのかが分かります.もし皆さんがexpressのソースコードを見たら、そのrequestモジュールとreponseモジュールはこの上で拡張されています.
今回はまずページを教えましょう.
以前から関係のあるものを書きました.node.js簡単なページ出力、皆さんは予習してもいいです.
一般的に、みんなはこのような例から入門します.
var http = require("http");
http.createServer(function(request, response) {
response.writeHead(200, {"Content-Type": "text/plain"});
response.write("Hello node.js");
response.end();
}).listen(8888);
上のスクリプトは一つのアプリ.jsの上に書いて、コンソールを開けて、その所在ディレクトリに位置して、node appを入力して、もう一つのブラウザを開けて、入力します.http://localhost:8888/効果がわかる上のスクリプトを分析:
ここですを開けて、httpモジュールのソースコードを調べてみます.大体呼び出しました.
_http_incoming
_http_outgoing
_http_server
_http_client
これらの4つの重要な内部モジュールは、私たちがnodejs環境でアクセスできません.httpは他の内部モジュールも引用していますが、今は無視できます._http_インカムhttp_outgoingは二つの入出力フローの対象を提供しています.流れは今後私たちが重点的に学ぶものです.このモジュールでは、廃棄された方法を除くと、主にこの3つの方法です.get、request、createServer.httpソースを削除します.皆さんは何を分かりますか?
//------------------Server------------------
var server = require('_http_server');
exports.ServerResponse = server.ServerResponse;
var Server = exports.Server = server.Server;
exports.createServer = function(requestListener) {
return new Server(requestListener);
};
//------------------Client------------------
var client = require('_http_client');
var ClientRequest = exports.ClientRequest = client.ClientRequest;
exports.request = function(options, cb) {
return new ClientRequest(options, cb);
};
exports.get = function(options, cb) { //get request
var req = exports.request(options, cb);
req.end();
return req;
};
では、レクネストListenerはどうやって伝えられますか?_。http_server内部モジュールに行って、ServerResonseはOutgoingMessageのサブクラスにすぎないことを発見しました.Serverの例はrequestイベントを通じて私たちを結びつけるcreateServerフィードバックであり、同時にconnectionイベントを通じてconnection Listenerを結び付ける方法でもあります.
if (!util.isUndefined(req.headers.expect) &&
(req.httpVersionMajor == 1 && req.httpVersionMinor == 1) &&
continueExpression.test(req.headers['expect'])) {
res._expect_continue = true;
if (EventEmitter.listenerCount(self, 'checkContinue') > 0) {
self.emit('checkContinue', req, res);
} else {
res.writeContinue();
self.emit('request', req, res);
}
} else {
self.emit('request', req, res);
}
resはServerResonseの実例であるvar res=new ServerResonse(req);reqはパーサーOnIncomping方法によって伝えられたものであり、パーサーOnIncompingはパー・オンインカムの一つの方法である._。http_commonの内部モジュールに追跡して、以下のいくつかの文を発見する.
parser.onIncoming(parser.incoming, info.shouldKeepAlive)// ,parser.incoming req
parser.incoming = new IncomingMessage(parser.socket);
はい、わかりました.reqはIncompingMessageの例です.resはServerResonse、すなわちOutgoingMessageの例です.ここは突っ込みをしなければなりません.nodejsのソースコードは混乱しています.★★★またシンプルモードに切り替えます.上記の話を理解すると、私たちはなぜ「http.ServerResonse」と「http.IncompingMessage」を重点的に勉強しなければならないのかが分かります.もし皆さんがexpressのソースコードを見たら、そのrequestモジュールとreponseモジュールはこの上で拡張されています.
//https://github.com/strongloop/express/blob/master/lib/request.js
var req = exports = module.exports = {
__proto__: http.IncomingMessage.prototype
};
//https://github.com/strongloop/express/blob/master/lib/response.js
var res = module.exports = {
__proto__: http.ServerResponse.prototype
};
長い間前に、私達はfsモジュールのfs.readFileを通じてサーバー上のあるファイルを読み込み、フロントエンドに戻ります.
var http = require("http");
var fs = require('fs');
exports.start = function(){
http.createServer(function(request, response) {
fs.readFile('./index.html', 'utf-8',function (err, data) {//
if (err) throw err;
response.writeHead(200, {"Content-Type": "text/html"});//
response.write(data);
response.end();
});
}).listen(8888);
console.log("server start...");
}
前にも話しましたが、今はもう流れの時代です.レスポンスは書き込み可能なストリームです.読み取り可能なストリームを作成すればいいです.
var http = require("http");
var fs = require("fs")
http.createServer(function (request, response) {
var readable = fs.createReadStream("./index.html")
response.writeHead(200, {"Content-Type": "text/html"});
readable.pipe(response);
}).listen(8888);
エラーが発生したら404ページにジャンプしたいです.
var http = require("http");
var fs = require("fs")
http.createServer(function (request, response) {
var readable = fs.createReadStream("./index.html")
response.writeHead(200, {"Content-Type": "text/html"});
readable.pipe(response);
readable.on("error", function () {
var readable = fs.createReadStream("./404.html")
readable.pipe(response);
})
}).listen(8888);