Node.js HTTP 模块

内置的 HTTP 模块

Node.js 有一个名为 HTTP 的内置模块,它允许 Node.js 通过超文本传输协议(HTTP)传输数据。

要包含 HTTP 模块,请使用 require() 方法:

var http = require('http');

Node.js 可作为 Web 服务器

HTTP 模块可以创建一个 HTTP 服务器,该服务器监听服务器端口并向客户端返回响应。

使用 createServer() 方法创建 HTTP 服务器:

实例

var http = require('http');

//create a server object:
http.createServer(function (req, res) {
  res.write('Hello World!'); //write a response to the client
  res.end(); //end the response
}).listen(8080); //the server object listens on port 8080
运行实例 »

当试图访问 8080 端口上的计算机时,将执行传递到 http.createServer() 方法的函数。

将上述代码保存在名为 "demo_http.js", 的文件中,并初始化该文件:

初始化 demo_http.js:

C:\Users\Your Name>node demo_http.js

如果您在计算机上执行了相同的步骤,您将看到与示例相同的结果: http://localhost:8080



添加 HTTP 标头信息

如果 HTTP 服务器的响应显示为 HTML,则应包含具有正确内容类型的 HTTP 标头:

实例

var http = require('http');
http.createServer(function (req, res) {
  res.writeHead(200, {'Content-Type': 'text/html'});
  res.write('Hello World!');
  res.end();
}).listen(8080);
运行实例 »

res.writeHead() 方法的第一个参数是状态码,200 表示一切正常,第二个参数是包含响应头的对象。


读取 Query 字符串

传递到 http.createServer() 的函数有一个 req 参数,该参数将来自客户端的请求表示为一个对象 (http.IncomingMessage 对象)。

此对象有一个名为 "url" 的属性,该属性保存域名后面的 url 部分:

demo_http_url.js

var http = require('http');
http.createServer(function (req, res) {
  res.writeHead(200, {'Content-Type': 'text/html'});
  res.write(req.url);
  res.end();
}).listen(8080);

将上述代码保存在名为 "demo_http_url.js" 的文件中,并初始化该文件:

初始化 demo_http_url.js:

C:\Users\Your Name>node demo_http_url.js

如果您在计算机上执行了相同的步骤,打开这两个地址时应该会看到两个不同的结果:

http://localhost:8080/summer

将产生这个结果:

/summer
运行实例 »

http://localhost:8080/winter

将产生这个结果:

/winter
运行实例 »

拆分 Query 字符串

有一些内置模块可以轻松地将 query 字符串拆分为可读部分,例如 URL 模块。

实例

将 query 字符串拆分为可读部分:

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

http.createServer(function (req, res) {
  res.writeHead(200, {'Content-Type': 'text/html'});
  var q = url.parse(req.url, true).query;
  var txt = q.year + " " + q.month;
  res.end(txt);
}).listen(8080);

将上述代码保存在名为 "demo_querystring.js" 的文件中,并初始化该文件:

初始化 demo_querystring.js:

C:\Users\Your Name>node demo_querystring.js

网址:

http://localhost:8080/?year=2017&month=July

将产生这个结果:

2017 July
运行实例 »

请阅读 Node.js URL 模块 一章了解 URL 模块的更多信息。