Node.js 之 http 模块


Node.js 提供了 http 模块,http 模块主要用于搭建 HTTP 服务端和客户端,使用 HTTP 服务器或客户端功能必须调用 http 模块,代码如下:

import http from 'http'

以下是演示一个最基本的 HTTP 服务器架构(使用 8080 端口),

服务端

创建 server.js 文件,代码如下所示:

import http from 'http'

import fs from 'fs'

import url from 'url'

// 创建服务器
http.createServer(function (request, response) {
    // 解析请求,包括文件名
    var pathname = url.parse(new URL(request.url)).pathname;

    // 输出请求的文件名
    console.log("Request for " + pathname + " received.");

    // 从文件系统中读取请求的文件内容
    fs.readFile(pathname.substring(1), function (err, data) {
        if (err) {
            console.log(err);
            // HTTP 状态码: 404 : NOT FOUND
            // Content Type: text/html
            response.writeHead(404, { 'Content-Type': 'text/html' });
        } else {
            // HTTP 状态码: 200 : OK
            // Content Type: text/html
            response.writeHead(200, { 'Content-Type': 'text/html' });

            // 响应文件内容
            response.write(data.toString());
        }
        //  发送响应数据
        response.end();
    });
}).listen(8080);

// 控制台会输出以下信息
console.log('Server running at http://127.0.0.1:8080/');

接下来在该目录下创建一个 index.html 文件,代码如下:

DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>node-servertitle>
head>
<body>
    <h1>我的第一个标题h1>
    <p>我的第一个段落。p>
body>
html>

执行 server.js 文件:

$ node server.js
Server running at http://127.0.0.1:8080/

接着我们在浏览器中打开地址:http://127.0.0.1:8080/index.html,显示如下图所示:

执行 server.js 的控制台输出信息如下:

Server running at http://127.0.0.1:8080/
Request for /index.html received.     #  客户端请求信息

客户端

Node 创建 Web 客户端需要引入 http 模块,创建 client.js 文件,代码如下所示:

var http = require('http');
 
// 用于请求的选项
var options = {
   host: 'localhost',
   port: '8080',
   path: '/index.html'  
};
 
// 处理响应的回调函数
var callback = function(response){
   // 不断更新数据
   var body = '';
   response.on('data', function(data) {
      body += data;
   });
   
   response.on('end', function() {
      // 数据接收完成
      console.log(body);
   });
}
// 向服务端发送请求
var req = http.request(options, callback);
req.end();

新开一个终端,执行 client.js 文件,输出结果如下:

$ node  client.js 
DOCTYPE html>


<meta charset="utf-8">
node-server<span class="pun"><span class="pln"><span class="pun"><span class="pln"><span class="pun"></<span class="pln">title<span class="pun">><span class="pln">
<span class="pun"></<span class="pln">head<span class="pun">><span class="pln">
<span class="str"><body><span class="pln">
    <span class="str"><h1><span class="pun">我的第一个标题</<span class="pln">h1<span class="pun">><span class="pln">
    <span class="str"><p><span class="pun">我的第一个段落。</<span class="pln">p<span class="pun">><span class="pln">
<span class="pun"></<span class="pln">body<span class="pun">><span class="pln">
<span class="pun"></<span class="pln">html<span class="pun">></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></pre>
<p>执行 server.js 的控制台输出信息如下:</p>
<pre class="prettyprint prettyprinted"><span class="typ">Server<span class="pln"> running at http<span class="pun">:<span class="com">//127.0.0.1:8080/<span class="pln">
<span class="typ">Request<span class="pln"> <span class="kwd">for<span class="pln"> <span class="pun">/<span class="pln">index<span class="pun">.<span class="pln">html received<span class="pun">.<span class="pln">   <span class="com"># 客户端请求信息</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></pre>
						  
					  </div>
						<!--conend-->
							<div class="p-2"></div>

						<div class="arcinfo my-3 fs-7 text-center">
							
							
			<a href='/t/etagid62437-0.html' class='tagbtn' target='_blank'>【01-10Node.js】</a>							
						



						</div>
						
						<div class="p-2"></div>

						

						
					</div>
					<div class="p-2"></div>
					<!--xg-->
					<div class="lbox p-4 shadow-sm rounded-3">
						<div class="boxtitle"><h2 class="fs-4">相关</h2></div>
						
<hr>				
						
			            
            
            <!---->
                                    
           <!---->
  			
						

					</div>
					<!--xgend-->
				</div>

				<div class="col-lg-3 col-12 p-0 ps-lg-2">
					<!--box-->									
					<!--boxend-->
					<!--<div class="p-2"></div>-->

					<!--box-->
									<div class="lbox p-4 shadow-sm rounded-3">
					
									   <div class="boxtitle pb-2"><h2 class="fs-4"><a href="#">标签</a></h2></div>
										<div class="clearfix"></div>
										<ul class="m-0 p-0 fs-7 r-tag">
										</ul>
									

										
										<div class="clearfix"></div>
									</div>
					<!--box end-->

					
				</div>

			</div>
		
		
		
		</div>	

</main>
						<div class="p-2"></div>
<footer>
<div class="container-fluid p-0 bg-black">
	<div class="container p-0  fs-8">
	<p class="text-center m-0 py-2 text-white-50">一品网 <a class="text-white-50" href="https://beian.miit.gov.cn/" target="_blank">冀ICP备14022925号-6</a></p>
	</div>	
</div>
<script>
var _hmt = _hmt || [];
(function() {
  var hm = document.createElement("script");
  hm.src = "https://hm.baidu.com/hm.js?6e3dd49b5f14d985cc4c6bdb9248f52b";
  var s = document.getElementsByTagName("script")[0]; 
  s.parentNode.insertBefore(hm, s);
})();
</script>
</footer>
		
<script src="/skin/bootstrap.bundle.js"></script>

</body>
</html>