Node.js的http模块:创建HTTP服务器、客户端示例

饭宝  金牌会员 | 2024-11-27 02:13:29 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 846|帖子 846|积分 2538

新书速览|Vue.js+Node.js全栈开发实战-CSDN博客
《Vue.js+Node.js全栈开发实战(第2版)(Web前端技能丛书)》(王金柱)【择要 书评 试读】- 京东图书 (jd.com)
要使用http模块,只必要在文件中通过require('http')引入即可。http模块是Node.js原生模块中最为亮眼的模块。传统的HTPP服务器会由Apache、Nginx、IIS之类的软件来担任,但是Node.js并不必要。Node.js的http模块本身就可以构建服务器,而且性能非常可靠。
1.Node.js服务器端

下面创建一个简朴的Node.js服务器。
【代码4-4】

  1. 01  const http = require('http');
  2. 02  const server = http.createServer(function(req, res) {
  3. 03      res.writeHead(200,{
  4. 04          'content-type': 'text/plain'
  5. 05      });
  6. 06      res.end('Hello, Node.js!');
  7. 07  });
  8. 08  server.listen(3000, function() {
  9. 09      console.log('listening port 3000');
  10. 10  });
复制代码
【代码阐明】

  • 运行这段代码,在浏览器中打开http://localhost:3000/或者http://127.0.0.1:3000/,页面中显示“Hello,Node.js!”笔墨。
http.createServer()方法返回的是http模块封装的一个基于变乱的HTTP服务器。同样地,http.request是其封装的一个HTTP客户端工具,可以用来向HTTP服务器发起请求。上面的req和res分别是http.IncomingMessage和 http.ServerResponse的实例。
http.Server的变乱重要有:

  • request:最常用的变乱,当客户端请求到来时,该变乱被触发,提供req和res两个参数,表示请求和响应信息。
  • connection:当TCP毗连创建时,该变乱被触发,提供一个socket参数,是net.Socket的实例。
  • close:当服务器关闭时,触发变乱(注意,不是在用户断开毗连时)。
http.createServer()方法其实就是添加了一个request变乱监听,利用下面的代码同样可以实现【代码4-4】的效果。
【代码4-5】

  1. 01  const http = require('http');
  2. 02  const server = new http.Server();
  3. 03  server.on('request', function(req, res) {
  4. 04      res.writeHead(200,{
  5. 05          'content-type': 'text/plain'
  6. 06      });
  7. 07      res.end('Hello, Node.js!');
  8. 08  });
  9. 09  server.listen(3000, function() {
  10. 10      console.log('listening port 3000');
  11. 11  });
复制代码
http.IncomingMessage是HTTP请求的信息,提供了以下3个变乱:
    data:当请求体数据到来时该变乱被触发。该变乱提供一个chunk参数,表示吸取的数据。
    end:当请求体数据传输完毕时,该变乱被触发,此后不会再有数据。
    close:用户当前请求结束时,该变乱被触发。
http.IncomingMessage提供的重要属性有:
    method:HTTP请求的方法,如GET。
    headers:HTTP请求头。
    url:请求路径。
    httpVersion:HTTP协议的版本。
将上面提到的知识融合到【代码4-4】的服务器代码中。
【代码4-6】

  1. 01  const http = require('http');
  2. 02  const server = http.createServer(function(req, res) {
  3. 03      let data  = '';
  4. 04      req.on('data', function(chunk) {
  5. 05          data += chunk;
  6. 06      });
  7. 07      req.on('end', function() {
  8. 08          let method = req.method;
  9. 09          let url = req.url;
  10. 10          let headers = JSON.stringify(req.headers);
  11. 11          let httpVersion = req.httpVersion;
  12. 12          res.writeHead(200,{
  13. 13              'content-type': 'text/html'
  14. 14          });
  15. 15          let dataHtml = '<p>data:' + data + '</p>';
  16. 16          let methodHtml = '<p>method:' + method + '</p>';
  17. 17          let urlHtml = '<p>url:' + url + '</p>';
  18. 18          let headersHtml = '<p>headers:' + headers + '</p>';
  19. 19          let httpVersionHtml = '<p>httpVersion:' + httpVersion + '</p>';
  20. 20  let resData=dataHtml + methodHtml + urlHtml + headersHtml + httpVersionHtml;
  21. 21          res.end(resData);
  22. 22      });
  23. 23  });
  24. 24  server.listen(3000, function() {
  25. 25      console.log('listening port 3000');
  26. 26  });
复制代码
打开浏览器输入地址后,可以在浏览器页面中看到如图4.9所示的信息。

图4.9  浏览器效果

http.ServerResponse是返回给客户端的信息,其常用的方法为:

  • res.writeHead(statusCode,[heasers]):向请求的客户端发送响应头。
  • res.write(data,[encoding]):向请求发送内容。
  • res.end([data],[encoding]):结束请求。
这些方法在上面的代码中已经演示过了,这里就不再演示了。
2.客户端向HTTP服务器发起请求

客户端向HTTP服务器发起请求的方法有:

  • http.request(option[,callback]):option为json对象,重要字段有host、port(默认为80)、method(默认为GET)、path(请求的相对于根的路径,默认是“/”)、headers等。该方法返回一个httpClientRequest实例。
  • http.get(option[,callback]):http.request()使用HTTP请求方式GET的轻便方法。
同时运行【代码4-4】和【代码4-7】中的代码,可以发现命令行中输出“Hello, Node.js!”字样,表明一个简朴的GET请求发送乐成了。
【代码4-7】
  1. 01  const http = require('http');
  2. 02  let reqData = '';
  3. 03  http.request({
  4. 04      'host': '127.0.0.1',
  5. 05      'port': '3000',
  6. 06      'method': 'get'
  7. 07  }, function(res) {
  8. 08      res.on('data', function(chunk) {
  9. 09          reqData += chunk;
  10. 10      });
  11. 11      res.on('end', function() {
  12. 12          console.log(reqData);
  13. 13      });
  14. 14  }).end();
复制代码
利用http.get()方法也可以实现同样的效果。
【代码4-8】

  1. 01  const http = require('http');
  2. 02  let reqData = '';
  3. 03  http.get({
  4. 04      'host': '127.0.0.1',
  5. 05      'port': '3000'
  6. 06  }, function(res) {
  7. 07      res.on('data', function(chunk) {
  8. 08          reqData += chunk;
  9. 09      });
  10. 10      res.on('end', function() {
  11. 11          console.log(reqData);
  12. 12      });
  13. 13  }).end();
复制代码
与服务端一样,http.request()和http.get()方法返回的是一个http.ClientRequest()实例。http.ClientRequest()类重要的变乱和方法有:

  • response:当吸取到响应时触发。
  • request.write(chunk[,encoding][,callback]):发送请求数据。
  • res.end([data][,encoding][,callback]):发送请求完毕,应该始终指定这个方法。
同样可以改写【代码4-8】为【代码4-9】。
【代码4-9】

  1. 01  const http = require('http');
  2. 02  let reqData = '';
  3. 03  let option= {
  4. 04      'host': '127.0.0.1',
  5. 05      'port': '3000'
  6. 06  };
  7. 07  const req = http.request(option);
  8. 08  req.on('response', function(res) {
  9. 09      res.on('data', function(chunk) {
  10. 10          reqData += chunk;
  11. 11      });
  12. 12      res.on('end', function() {
  13. 13          console.log(reqData);
  14. 14      });
  15. 15  });
复制代码




免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

饭宝

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表