http模块
http
模块允许 Node.js 通过超文本传输协议(HTTP)传输数据,它使开发 Web
应用变得更加容易,要使用 http
模块,首先需要使用下面代码引入它:
var http = require('http');
http
模块中主要有 server
对象、response
对象和 request
对象,本节将对它们的使用进行讲解。
server对象
server
对象用来创建一个服务。在 Node.js 中,使用 http
模块中的 createServer()
方法,可以创建一个 server
对象,代码如下:
var server = require('http').createServer();
server
对象中主要使用的方法有 listen()
方法和 close()
方法,如表 11.3 所示,它们分别控制着服务器的启动和结束。

端口(port)是计算机与计算机之间信息的通道。计算机中的端口从 0 开始,一共有 65535 个端口。 |
例如,首先创建一个 server
服务对象,并使用其 listen()
方法启动一个端口号为 52273 的本地地址,运行 10 秒后,使用 server
服务对象的 close()
方法关闭服务器。代码如下:
//创建server对象
var server = require('http').createServer();
//启动服务器,监听52273端口
server.listen(52273, function () {
console.log('服务器监听地址是 http://127.0.0.1:52273');
});
//10秒后执行close()方法
var test = function () {
//关闭服务器
server.close();
};
setTimeout(test, 10000);
运行上面代码,初始效果如图11.6所示,等待10秒后,效果如图11.7所示。


response对象
response
对象用来输出响应内容,发送给客户端,该对象常用的方法如下。
-
writeHead(statusCode[,statusMessage][,headers])
:返回响应头信息。参数说明如下。-
statusCode
:接收数字类型的状态码。 -
statusMessage
:接收任何显示状态消息的字符串。 -
headers
:接收任何函数、数组或字符串。
-
-
end([data][,encoding])
:返回响应内容。参数说明如下。-
data
:执行完毕后要输出的字符。 -
encoding
:对应data
的字符编码。
-
例如,使用 http
模块的 createServer()
方法创建一个服务,在其中使用 response
对象中的 writeHead()
方法和 end()
方法获取服务器的响应内容,代码如下:
//创建Web服务器,并监听52273端口
require('http').createServer(function (request, response) {
//返回响应内容
response.writeHead(200, { 'Content-Type': 'text/html' });
response.end('<h1>Hello,Node.js</h1>');
}).listen(52273, function () {
console.log('服务器监听地址是 http://127.0.0.1:52273');
});
运行上面代码,然后在浏览器中输入 http://127.0.0.1:52273/,可以看到浏览器中的界面效果如图 11.8 所示。

response
对象可以响应各种类型的内容,如 HTML 文件、多媒体文件等,下面分别进行介绍。
响应HTML文件
上面的示例中,我们直接在 end()
方法中编写响应内容 <h1>Hello,Node.js</h1>
并返回给客户端。但是实际开发中,不可能把所有内容都写在 end()
方法中,比如我们可以响应一个编写好的 HTML 文件,可以使用 fs
模块的 readFile()
方法读取其内容,然后通过 end()
方法去响应读取到的 HTML 文件内容并返回给客户端。
【例11.1】将 HTML 文件返回给客户端。(实例位置:资源包\源码\11\01)
步骤如下。
(1) 新建一个 index.html 文件,其中使用 <h1>
标签和 <pre>
标签输出一个 404 页面的字符画,该文件中的内容主要用作响应内容,代码如下:
<!DOCTYPE html>
<html>
<head>
<!--指定页面编码格式-->
<meta charset="UTF-8">
<!--指定页头信息-->
<title>特殊文字符号</title>
</head>
<body>
<!--表示文章标题-->
<h1 align="center">汪汪!你想找的页面让我吃喽!</h1>
<!--绘制可爱小狗的字符画-->
<pre align="center">
.----.
_.'__ `.
.--($)($$)---/#\
.' @ /###\
: , #####
`-..__.-' _.-\###/
`;_: `"'
.'"""""`.
/, hi ,\\
// 你好! \\
`-._______.-'
___`. | .'___
(______|______)
</pre>
</body>
</html>
(2) 新建一个 .js
文件,该文件中使用 createServer()
方法创建一个 Web
服务器,然后使用 fs
模块的 readFile()
方法读取 index.html
的内容,存储到变量 data
中,最后通过 response
对象中的 end()
方法输出给客户端。代码如下:
//引入模块
var fs = require('fs');
var http = require('http');
//创建服务器
http.createServer(function (request, response) {
//读取HTML文件内容
fs.readFile('index.html', function (error, data) {
response.writeHead(200, { 'Content-Type': 'text/html' });
response.end(data);
});
}).listen(52273, function () {
console.log('服务器监听地址是 http://127.0.0.1:52273');
});
运行 .js
文件,在浏览器中输入 http://127.0.0.1:52273/ ,可以看到浏览器中的效果如图 11.9 所示。

响应多媒体文件
【例11.2】将图片和视频返回客户端。(实例位置:资源包\源码\11\02)
本实例中需要准备的资源文件有 JavaScript.mp4
和 demo.jpg
文件,然后在资源文件的目录下新建一个 js.js
文件,其中使用 createServer()
方法创建两个 Web
服务器,分别监听 52273 端口和 52274 端口。52273 端口的服务器用来输出图片,52274 端口的服务器用来输出视频。然后,使用 response
对象分别响应已经准备好的图片文件和视频文件,发送给客户端。js.js
文件如下:
//引入模块
var fs = require('fs');
var http = require('http');
//创建服务器,监听52273端口
http.createServer(function (request, response) {
//读取图片文件
fs.readFile('demo.jpg', function (error, data) {
response.writeHead(200, { 'Content-Type': 'image/jpeg' });
response.end(data);
});
}).listen(52273, function () {
console.log('服务器监听位置是 http://127.0.0.1:52273');
});
//创建服务器,监听52274端口
http.createServer(function (request, response) {
//读取视频文件
fs.readFile('JavaScript.mp4', function (error, data) {
response.writeHead(200, { 'Content-Type': 'video/mpeg4' });
response.end(data);
});
}).listen(52274, function () {
console.log('服务器监听位置是 http://127.0.0.1:52274');
});
运行 js.js
文件,在浏览器中输入 http://127.0.0.1:52273/ ,可以看到浏览器中的效果如图 11.10 所示。

在浏览器中输入 http://127.0.0.1:52274/ ,可以看到浏览器中的效果如图 11.11 所示。
网页自动跳转
在访问网站时,网页自动跳转是经常出现的情形之一,在 Node.js 中,实现该功能需要使用响应信息头的 Location
属性来指定要跳转的地址。

【例11.3】实现网页自动跳转。(实例位置:资源包\源码\11\03)
新建一个 js.js
文件,使用 createServer()
方法创建 Web
服务器后,在 writeHead()
方法中,使用 Location
属性指定要跳转的网页地址为 https://www.mingrisoft.com/ 。运行 js.js
文件,在浏览器中输入 http://127.0.0.1:52273/ ,可以看到浏览器中的效果如图 11.12 所示。

实例代码如下:
//引入模块
var http = require('http');
//创建服务器,实现网页自动跳转
http.createServer(function (request, response) {
response.writeHead(302, { 'Location': 'https://www.mingrisoft.com/' });
response.end();
}).listen(52273, function () {
console.log('服务器监听地址在 http://127.0.0.1:52273');
});
上述代码中, ![]() Figure 9. 表11.4 常见的状态码
|
request对象
request
对象表示 HTTP
请求,包含了请求查询字符串、参数、内容、HTTP
头等属性,其常用属性如表 11.5 所示。

HTTP
请求有两种,分别是 GET
请求和 POST
请求。其中,GET
请求用来获取数据,POST
请求用来提交数据。对于我们来说,分辨这两种请求的最直观的方法就是:GET
把参数包含在 URL
中,比如通过浏览器的地址栏直接输入访问某个网址,就是 GET
请求;POST
通过 request body
传递参数,比如输入用户名和密码登录某个网站,就是 POST
请求。
【例11.4】request 对象的使用。(实例位置:资源包\源码\11\04)
具体步骤如下。
(1) 创建一个 login.html
文件,该文件为一个基本的用户登录页面。代码如下:
<!DOCTYPE html>
<head>
<meta charset="utf-8">
<title>用户登录</title>
<style>
body {
font: 13px/20px 'Lucida Grande', Tahoma, Verdana, sans-serif;
color: #404040;
background: #0ca3d2;
}
.container {
margin: 80px auto;
width: 640px;
}
/*篇幅原因,此处省略部分CSS代码*/
</style>
</head>
<body>
<section class="container">
<div class="login">
<h1>用户登录</h1>
<form method="post">
<p><input type="text" name="login" value="" placeholder="用户名"></p>
<p><input type="password" name="password" value="" placeholder="密码"></p>
<p class="remember_me">
<label>
<input type="checkbox" name="remember_me" id="remember_me">
记住密码
</label>
</p>
<p class="submit"><input type="submit" name="commit" value="登录"></p>
</form>
</div>
</section>
</body>
</html>
(2)新建一个 js.js
文件,该文件中通过 request
对象的 method
属性对 GET
和 POST
请求进行判断。如果是 GET
请求,直接访问页面;如果是 POST
请求,则显示 POST
请求提交的数据。代码如下:
//引入模块
var http = require('http');
var fs = require('fs');
//创建服务器
http.createServer(function (request, response) {
if (request.method == 'GET') {
//GET请求
fs.readFile('login.html', function (error, data) {
response.writeHead(200, { 'Content-Type': 'text/html' });
response.end(data);
});
} else if (request.method == 'POST') {
//POST请求
request.on('data', function (data) {
response.writeHead(200, { 'Content-Type': 'text/html' });
response.end('<h1>' + data + '</h1>');
});
}
}).listen(52273, function () {
console.log('服务器监听地址是 http://127.0.0.1:52273');
});
运行 js.js
文件,在浏览器中输入 http://127.0.0.1:52273/ ,可以看到浏览器中的效果如图 11.13 所示。

在页面中输入用户名和密码,单击 “登录” 按钮,可以看到如图 11.14 所示的效果,这就是将通过 POST
请求提交的数据显示出来。
