Node.js - Web 模块



什么是 Web 服务器?

Node.js 中的 http 模块支持通过超文本传输协议 (HTTP) 在服务器和客户端之间传输数据。http 模块中的 createServer() 函数创建 http 服务器的实例Node.js。它通过指定的主机和端口侦听来自其他 http 客户端的传入请求。

Node.js服务器是一个软件应用程序,它处理HTTP客户端(如Web浏览器)发送的HTTP请求,并返回网页以响应客户端。Web 服务器通常提供 html 文档以及图像、样式表和脚本。

大多数 Web 服务器都支持服务器端脚本,使用脚本语言或将任务重定向到应用程序服务器,应用程序服务器从数据库中检索数据并执行复杂的逻辑,然后通过 Web 服务器将结果发送到 HTTP 客户端。

Web 应用程序架构

Web应用程序通常分为四层:

Web Architecture
  • 客户端 - 该层由Web浏览器,移动浏览器或应用程序组成,它们可以向Web服务器发出HTTP请求。
  • 服务器 - 这一层有Web服务器,它可以拦截客户端发出的请求,并向它们传递响应。
  • 业务 - 此层包含应用程序服务器,Web 服务器使用它来执行所需的处理。该层通过数据库或一些外部程序与数据层进行交互。
  • 数据 - 此层包含数据库或任何其他数据源。

使用 Node 创建 Web 服务器

Node.js提供了一个 http 模块,可用于创建服务器的 HTTP 客户端。以下是在 5000 端口侦听的 HTTP 服务器的最低结构。

创建一个名为 server.js 的 js 文件 -


var http = require('http');
var fs = require('fs');
var url = require('url');

// Create a server
http.createServer( function (request, response) { 	
	 	// Parse the request containing file name
	 	var pathname = url.parse(request.url).pathname;
	 	
	 	// Print the name of the file for which request is made.
	 	console.log("Request for " + pathname + " received.");
	 	
	 	// Read the requested file content from file system
	 	fs.readFile(pathname.substr(1), function (err, data) {
	 	 	 if (err) {
	 	 	 	 	console.log(err);
	 	 	 } else {
	 	 	 	 	response.writeHead(200, {'Content-Type': 'text/html'});		 	
	 	 	 	 	
	 	 	 	 	// Write the content of the file to response body
	 	 	 	 	console.log(data.toString());
	 	 	 	 	response.write(data.toString());		 			 	
	 	 	 }
	 	 		
	 	 	 // Send the response body	
	 	 	 response.end();
	 	}); 		
}).listen(5000);

// Console will print the message
console.log('Server running at http://127.0.0.1:5000/');

createServer() 函数开始在 localhost 的 5000 端口上侦听客户端请求。Http Request 和 Server Response 对象由 Nde.js 服务器内部提供。它获取 HTTP 客户端请求的 HTML 文件的 URL。createServer() 函数的回调函数读取请求的文件,并将其内容写入服务器的响应。

您可以从服务器计算机本身的浏览器发送 HTTP 请求。运行 aboce server.js文件,并在浏览器窗口中输入 http://localhost:5000/index.html 作为 URL。将呈现index.html页面的内容。

为任何其他现有网页(如 http://localhost:5000/hello.html)发送请求,将呈现所请求的页面。

使用 Node 创建 Web 客户端

可以使用 http 模块创建 Web 客户端。让我们看一下以下示例。

创建一个名为 client.js 的 js 文件(将此文件保存在另一个文件夹中,而不是在包含server.js脚本的文件夹中) -


var http = require('http');
var fs = require('fs');
var path = require('path');

// Options to be used by request	
var options = {
	 	host: 'localhost',
	 	port: '5000',
	 	path: path.join('/',process.argv[2])	
};
var body = '';
// Callback function is used to deal with response
var callback = function(response) {
	 	// Continuously update stream with data
	 	
	 	response.on('data', function(data) {
	 	 	 body += data;
	 	});
	 	
	 	response.on('end', function() {
	 	 	 // Data received completely.
	 	 	 console.log(body);
	 	 	 fs.writeFile(options.path.substr(1), body, function (err) {	
	 	 	 	 if (err)
	 	 	 	 	 	 console.log(err);
	 	 	 	 else
	 	 	 	 	 	 console.log('Write operation complete.');
	 	 	 });
	 	 		
	 	});
}
// Make a request to the server
var req = http.request(options, callback);
req.end();

此客户端脚本为作为命令行参数给出的网页发送 HTTP 请求。例如 -

node main.js index.html

文件的名称是参数列表中的 argv[2]。它用作 options 参数中的路径参数,以传递给 http.request() 方法。一旦服务器接受此请求,其内容就会写入响应流中。client.js接收此响应,并将收到的数据作为新文件写入客户端的文件夹中。

首先运行服务器代码。从另一个终端运行客户端代码。您将看到在客户端文件夹中创建的请求的 HTML 文件。