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
运行示例 »

该函数传入http.createServer()方法,当有人尝试通过端口 8080 访问计算机时将执行。

将上面的代码保存在名为 "demo_http.js" 的文件中,并启动该文件:

启动demo_http.js:

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

如果您在计算机上执行了相同的步骤,您将看到与示例相同的结果:http://本地主机: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()method 是状态码,200 表示一切正常,第二个参数是包含响应头的对象。


读取查询字符串

该函数传入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
运行示例 »

分割查询字符串

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

示例

将查询字符串拆分为可读部分:

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=7 月

将产生这样的结果:

2017 July
运行示例 »

阅读有关 URL 模块的更多信息Node.js URL 模块章节。