ホームページ  >  記事  >  ウェブフロントエンド  >  NodeのHTTPコアモジュールの深い理解

NodeのHTTPコアモジュールの深い理解

不言
不言オリジナル
2018-07-13 17:08:061550ブラウズ

この記事では、主に Node の HTTP コア モジュールについて詳しく説明します。これは、必要な友人に参照してもらえるようにしました

HTTP

接続をリッスンします。とリクエスト
var http = require('http');
var fs = require('fs');
var url = require('url');

var serverHandle = function(req, res) {
  var pathname = url.parse(req.url).pathname; // 对请求的url进行分析,取得pathname
  console.log(url.parse(req.url));
  console.log(url.parse(req.url).pathname);
  // 消除favicon.ico影响
  if (req.url !== "/favicon.ico")
    console.log(req.url); //消除/favicon.ico的影响

  console.log(pathname);
  // 读取文件
  fs.readFile(pathname.substr(1), function(err, data) {
    if (err) {
      console.log(err);
      res.writeHead(404, {"Content-Type": "text/html"});
    } else {
      res.writeHead(200, {"Content-Type": "text/html"});
      res.end(data.toString());
    }
  })
};

var server = http.createServer(serverHandle);

server.listen(3000);

console.log('http is running at 127.0.0.1:3000');
接続とリクエストの違い
var http = require('http');

var server = http.createServer(); // 返回一个http.server实例

// 【一】
// 监听request事件,每接受到一个请求的时候触发
// 当服务端接收到客户端请求时,触发request事件,所以可以使用监听request事件的方式来代替createServer中的回调函数:
server.on('request', function(req,res) {
  //接收到客户端请求的连接后代码部分
})

// 【二】
// 【监听客户端的链接】
// server.listen(port,[host],[backlog],[callback]);
server.listen(3000,127.0.0.1);

/*
port:       监听的端口号,0表示为服务器随机分配一个端口号。
host:       监听的地址,默认为本机(localhost)
backlog:   指定位于[等待队列中]的客户端连接的[最大数量]。超过此数量,则服务器拒绝新的客户端请求。
callback:  开启监听后触发的回调函数。当服务器开启监听后会触发listening事件,可以通过监听listening事件来代替callback回调函数。
 */

server.on('listening', function(){
  console.log('我监听连接,并且执行此回调函数!!');
})
リクエストを通じてクライアント情報を取得する
クライアントがサーバーに接続すると、サーバーは http.IncommingMessage (コールバック) によってインスタンス化されたオブジェクトを渡すことができます。 createServer メソッドの最初のパラメーターの関数) を使用して、クライアントの要求情報を取得し、クライアントによって要求されたデータを読み取ります。
// 默认情况下,客户端与服务端每进行依次HTTP交互就进行一次连接,在HTTP1.1之后添加了长连接,
// 如果在客户端发送请求头信息中或服务器发送的响应头信息中包含“Connection: keep-live”信息,则HTTP连接将继续保持。


// 当客户端与服务器建立连接时,会触发服务器对象的connection事件,可以通过监听connection事件来处理连接后的事情,此时回调参数为socket对象。

server.on('connection', function(socket) {
  console.log(socket);
})

** connection 和 request的区别
客户端与服务端每次建立连接的时候会触发connection事件,
当服务端接受到客户端请求的时候,就会触发request事件。发送请求是建立在双方已经成功连接的接触之上
* method:   客户端请求方式
* url:      请求的地址
* headers:  客户端发送的请求头信息
* httpVersion: HTTP请求版本
* trailers: 客户端发送的trailers对象信息。只有IncommingMessage对象的end事件触发后才能读取到该信息。
* socket:   服务器端监听客户端请求的socket对象。
* data事件: 当服务器接收到客户端发送的请求数据时触发data事件。
* end事件:  当客户端发送给服务器数据执行完毕时触发end事件。
var http = require('http');

var serverHandle = function(req,res) {
  console.log(req);
  req.on("data",function(data){
        console.log("接收到的数据:"+decondeURIComponent(data));
    });

  req.on("end",function(){
        console.log("数据接收完毕");
    });
}

var server = http.createServer(serverHandle);

server.listen(3000);
server.on('listening', function() {
  console.log('服务器启动中~~~');
})

クライアント情報に応答する http.IncommingMessage 实例化的对象(createServer方法中回调函数的第一个参数)的一些属性和方法来获取客户端的请求信息和读取客户端请求的数据。

// 一个简单的get请求,获取信息
var http = require('http');
var url = require('url');
var util = require('util');

var serverHandle = function(req,res) {
  var parse = url.parse(req.url,true).query;
  res.write('name'+ parse.name);
  res.write('url'+ parse.url);
  res.end();
}

var server = http.createServer(serverHandle);

server.listen(3000);
server.on('listening', function() {
  console.log('服务器启动中~~~');
})

// http://localhost:3000/?url=123&name=321
rrreeerrreee
响应客户端信息

利用http.ServerResponse对象(createServer方法或request

http.ServerResponse オブジェクトを使用します (createServer メソッドまたは request イベント処理メソッドの 2 番目のパラメーター) to クライアントがデータを送信します。

上記がこの記事の全内容です。その他の関連コンテンツについては、PHP 中国語 Web サイトをご覧ください。

関連する推奨事項: 🎜

以上がNodeのHTTPコアモジュールの深い理解の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。