深入理解Node的HTTP核心模块

这篇文章主要介绍了关于深入理解node的http核心模块,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下

HTTP

创建一个服务器

var http = require('http');var fs = require('fs');var url = require('url');var serverHandle = function(req, res) {  var pathname = url.parse(req.url).pathname; // 对请求的url进行分析,取得pathname  console.log(url.parse(req.url));  console.log(url.parse(req.url).pathname);  // 消除favicon.ico影响  if (req.url !== "/favicon.ico")    console.log(req.url); //消除/favicon.ico的影响  console.log(pathname);  // 读取文件  fs.readFile(pathname.substr(1), function(err, data) {    if (err) {      console.log(err);      res.writeHead(404, {"Content-Type": "text/html"});    } else {      res.writeHead(200, {"Content-Type": "text/html"});      res.end(data.toString());    }  })};var server = http.createServer(serverHandle);server.listen(3000);console.log('http is running at 127.0.0.1:3000');

登录后复制

监听连接和请求

var http = require('http');var server = http.createServer(); // 返回一个http.server实例// 【一】// 监听request事件,每接受到一个请求的时候触发// 当服务端接收到客户端请求时,触发request事件,所以可以使用监听request事件的方式来代替createServer中的回调函数:server.on('request', function(req,res) {  //接收到客户端请求的连接后代码部分})// 【二】// 【监听客户端的链接】// server.listen(port,[host],[backlog],[callback]);server.listen(3000,127.0.0.1);/*port:       监听的端口号,0表示为服务器随机分配一个端口号。host:       监听的地址,默认为本机(localhost)backlog:   指定位于[等待队列中]的客户端连接的[最大数量]。超过此数量,则服务器拒绝新的客户端请求。callback:  开启监听后触发的回调函数。当服务器开启监听后会触发listening事件,可以通过监听listening事件来代替callback回调函数。 */server.on('listening', function(){  console.log('我监听连接,并且执行此回调函数!!');})

登录后复制

connection 和 request的区别

// 默认情况下,客户端与服务端每进行依次HTTP交互就进行一次连接,在HTTP1.1之后添加了长连接,// 如果在客户端发送请求头信息中或服务器发送的响应头信息中包含“Connection: keep-live”信息,则HTTP连接将继续保持。// 当客户端与服务器建立连接时,会触发服务器对象的connection事件,可以通过监听connection事件来处理连接后的事情,此时回调参数为socket对象。server.on('connection', function(socket) {  console.log(socket);})** connection 和 request的区别客户端与服务端每次建立连接的时候会触发connection事件,当服务端接受到客户端请求的时候,就会触发request事件。发送请求是建立在双方已经成功连接的接触之上

登录后复制

通过请求获取客户端信息

当客户端与服务器连接后,服务器可以通过 http.IncommingMessage 实例化的对象(createServer方法中回调函数的第一个参数)的一些属性和方法来获取客户端的请求信息和读取客户端请求的数据。

* method:   客户端请求方式* url:      请求的地址* headers:  客户端发送的请求头信息* httpVersion: HTTP请求版本* trailers: 客户端发送的trailers对象信息。只有IncommingMessage对象的end事件触发后才能读取到该信息。* socket:   服务器端监听客户端请求的socket对象。* data事件: 当服务器接收到客户端发送的请求数据时触发data事件。* end事件:  当客户端发送给服务器数据执行完毕时触发end事件。

登录后复制

var http = require('http');var serverHandle = function(req,res) {  console.log(req);  req.on("data",function(data){        console.log("接收到的数据:"+decondeURIComponent(data));    });  req.on("end",function(){        console.log("数据接收完毕");    });}var server = http.createServer(serverHandle);server.listen(3000);server.on('listening', function() {  console.log('服务器启动中~~~');})

登录后复制

// 一个简单的get请求,获取信息var http = require('http');var url = require('url');var util = require('util');var serverHandle = function(req,res) {  var parse = url.parse(req.url,true).query;  res.write('name'+ parse.name);  res.write('url'+ parse.url);  res.end();}var server = http.createServer(serverHandle);server.listen(3000);server.on('listening', function() {  console.log('服务器启动中~~~');})// http://localhost:3000/?url=123&name=321

登录后复制

响应客户端信息

利用http.ServerResponse对象(createServer方法或request事件处理方法的第二个参数)向客户端发送数据。

以上就是本文的全部内容,希望对大家的学习有所帮助,更多相关内容请关注PHP中文网!

相关推荐:

以上就是深入理解Node的HTTP核心模块的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2746255.html

(0)
上一篇 2025年3月8日 03:55:17
下一篇 2025年3月7日 07:13:51

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • 对node.js的调试方法的简单分析

    这篇文章主要介绍了关于对node.js的调试方法的简单分析,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下 调试能力是编程的基本素质之一,快速的定位bug可以让开发者到点下班,免于加班之苦。众所周知JavaScript调试是非…

    2025年3月8日 编程技术
    200
  • Koa中发送响应的一种简单的方式

    本篇文章给大家分享的是关于koa中发送响应的一种简单的方式,内容很不错,有需要的朋友可以参考一下,希望可以帮助到大家。 背景 最近做了很多node的后台项目,写了很多接口,但是发现随着接口的慢慢增多,需要写越来越来越多类似于下面这种代码。 …

    编程技术 2025年3月8日
    200
  • 如何使用node生成验证码

    这篇文章给大家分享的内容是关于如何使用node生成验证码,有一定的参考价值,有需要的朋友可以参考一下。 前言 网络安全始终是一个重要话题,比如当你发现有人在恶意请求你的网站的邮箱注册接口,那么你可以考虑在服务端加上验证码,提高网站的安全性,…

    2025年3月8日
    200
  • 如何实现keystoneJS的后台管理系统的部署

    本篇文章分享给大家的内容是关于如何实现keystonejs的后台管理系统的部署,内容很详细,接下来我们就来看看具体的内容,希望可以帮助到大家。 环境安装: node 环境(node,npm, 建议nvm管理) pm2 安装(npm inst…

    编程技术 2025年3月8日
    200
  • mongoDB中node中的增删改查的学习

    这篇文章给大家介绍的文章内容是关于mongodb中node中的增删改查的学习,有很好的参考价值,希望可以帮助到有需要的朋友。 准备 首先,要在node中使用mongoDB,需要安装MongoDB Driver,命令如下:npm instal…

    2025年3月8日
    200
  • 使用Nodejs如何来操作MongoDB

    这篇文章给大家介绍的文章内容是关于使用nodejs如何来操作mongodb,有很好的参考价值,希望可以帮助到有需要的朋友。 先用npm安装mongodb npm install mongodb 登录后复制 安装成功后,继续在上面操作创建的库…

    编程技术 2025年3月8日
    200
  • VSCode新版本带JSDoc的解析功能完善JavaScript代码提示

    本文章为了分享自己技术方面的心得,分享过程中获得更多,一方面是提高自己书面表达能力。那就先从简单的写起。 弱类型脚本语言的代码提示功能一直是开发者一个隐隐的痛点,没有它也不是不能干活,但是经常因为出现拼写错误或不经意的修改导致的变量丢失而耗…

    2025年3月8日
    200
  • 用原生JavaScript造轮子,看完这篇文章我会了,你呢?

    本文章教你怎样造出一套实用性、可复用性高的轮子。分页配置的讲解,及基本参数,平时工作中常常会发现有大量业务其实是重复的,而用别人的插件也不能很好的解决一些定制化的需求,因此我决定把一些常用的组件抽离、封装出来,形成一套自己的插件库。于此,我…

    2025年3月8日
    200
  • 技术文章:使用Egg.js搭建后台服务API (收藏系列)

    在学习js时遇到egg.js,就做了详细的研究,它是阿里推出的基于koa的node开发框架,为企业级框架和应用而生。如何搭建后台服务api ,还需要后面的学习。本文章主要是介绍egg.js搭建后台服务api ,需要的可以参考下。 写在前面的…

    编程技术 2025年3月8日
    200
  • vue.js图片如何转Base64上传图片并预览

    这篇文章给大家介绍的内容是关于vue.js图片如何转base64上传图片并预览,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 对于前端人员来说,图片处理是一个很常见的需求,由于图片稍微特殊,现在多数做法都是使用调用ajax…

    编程技术 2025年3月8日
    200

发表回复

登录后才能评论