广告
返回顶部
首页 > 资讯 > 前端开发 > node.js >Node.js中HTTP模块与事件模块详解
  • 648
分享到

Node.js中HTTP模块与事件模块详解

模块详解事件 2022-06-04 17:06:32 648人浏览 泡泡鱼
摘要

Node.js的http服务器 通过使用Http模块的低级api,node.js允许我们创建服务器和客户端。刚开始学node的时候,我们都会遇到如下代码: var http = require('http

Node.js的http服务器

通过使用Http模块的低级apinode.js允许我们创建服务器和客户端。刚开始学node的时候,我们都会遇到如下代码:

var http = require('http');

http.createServer(function (req,res) {

    res.end('Hello Worldn');

}).listen(3000,"127.0.0.1");

console.log("Server funning at http://127.0.0.1:3000");

这段代码的包括了http模块的信息,意思是:

1.从`Node.js`的核心请求HTTP模块并赋予一个变量,以便在以后的脚本中使用。
于是脚本就可以访问一些方法来通过`Node.js`使用`HTTP`。

2.使用`createServer`创建新的WEB服务器对象

3.脚本将一个匿名函数传递给服务器,告诉web服务器对象每当其接收到请求时会发生的是什么

4.脚本第4行定义了web服务器的端口和主机,这意味着可以使用`http://127.0.0.1:3000`
来访问服务器

Http头

对于每个HTTP请求和响应,都会发送HTTP头,HTTP头发送的是附加的信息,包括内容类型、服务器发送响应的日期以及HTTP状态码

http头包含了许多信息,以下是我的百度首页包含的http头的信息:

查看图片

由于我的百度首页添加了较多的网站,所以这里的数据和读者们的可能不一样。从中我们可以看出百度是web服务器是BWS/1.1

下面是刚才上面那段代码的http头部信息:

查看图片

Node.js中的重定向

在node中,我们可以很容易地创建一个简单的服务器将访问者重定向到另外一个Web页面上,其准则如下:

1.给客户发送301响应代码,告诉客户,资源已经移到另一个位置了;
2.发送一个位置头告诉客户重定向到哪里。

相关代码如下:

var http = require('http');

http.createServer(function (req,res) {

    res.writeHead(301,{

        'Location':'Http://example-2.com/web'

    });

    res.end();

}).listen(3000,'127.0.0.1');

console.log("Server funning at http://127.0.0.1:3000");

打开浏览器访问http://127.0.0.1:3000页面会被重定向。

响应不同的请求

Node.js不单可以创建单一的响应,对于多种类型的请求,我们需要给应用程序加一些路由。Node通过使用URL模块让这一切直截了当。URL模块使我们可以读取URL、分析它然后对输出做一些事情。

var url = require('url');

var requestURL = "http://example.com:1234/path?query=string#hash"

现在,我们可以分析请求的URL并从中截取内容,例如,要想获得主机名称,我们可以输入:

url.parse(requestURL).hostname

这时,他将返回"example.com"

取得端口号可以输入:

url.parse(requestURL).port

他将返回“1234”

事件模块

Node.js被认为是实现并发的最佳方法。Events(事件)模块是Node.js的核心,许多其他模块用它来围绕着事件架构功能。由于Node.js运行于单一的线程中,任何同步代码都是阻塞的。所以,在编写Node.js代码的时候我们要考虑一些简单的规则:

1.别阻塞——`Node.js`是单线程的,如果代码阻塞的话所有其他一切都停止了
2.快速返回——操作应当快速返回。如果不能快速返回,就应当将其迁移到另一个进程中
Events模块让开发人员可以为事件设置侦听器和处理器。在客户端js中,我们可以对单击事件设置一个监听器,然后在事件发生时执行一些事情:

var tar = document.getElementById("target");

tar.addEventListener("click", function () {

   alert("click event fired,target was clicked"); 

},false);

当然,这是在不考虑IE兼容性的一个例子,Node.js重点事件更常见的是网络事件,包括:

1.来自web服务器的响应
2.从文件读取数据
3.从数据库返回数据
使用Events模块我们首先要创建一个新的EventEmitter实例:

var EventEmitter= require('events').EventEmitter;

var test = new EventEmitter();

一旦在代码中加入上述内容,就可以添加事件和侦听器了,我们可以按如下方法发送事件,比如:

test.emit('msg','the message send by node');

第一个参数是对事件进行描述的字符串,以便用于侦听器的匹配

为了接收消息,就必须添加侦听器,侦听器在事件触发时处理它,例如:

test.on('message',function(data){

    console.log(data);

});

Events模块addListener/on,once,removeListener,removeAllListeners,emit等基本的事件监听模式的方法实现。它与前端DOM树上的事件并不相同,因为它不存在冒泡,逐层捕获等属于DOM的事件行为,也没有preventDefault()、stopPropagation()、 stopImmediatePropagation() 等处理事件传递的方法。

1.类: events.EventEmitter:通过 require('events').EventEmitter 获取 EventEmitter 类。
2.emitter.on(event, listener):添加一个 listener 至特定事件的 listener 数组尾部。 返回 emitter,方便链式调用,下同。

3.emitter.removeListener(event, listener)从一个事件的 listener 数组中删除一个 listener

4.emitter.listeners(event)返回指定事件的 listener 数组
更多详情见:Node.js API 文档

以下代码展示了一条能在5秒内自我毁灭的机密消息:

var EventEmitter = require('events').EventEmitter;

var secretMessage = new EventEmitter();

secretMessage.on('message', function (data) { console.log(data); });

secretMessage.on('self destruct', function () { console.log('the msg is destroyed!'); });

secretMessage.emit('message','this is a secret message.It will self deatruct in 5s');

setTimeout(function () { secretMessage.emit('self destruct'); },5000);

在这段脚本中,发送了两个事件,有两个侦听器。当脚本运行时,消息事件就发生,并由“message”处理器处理

在Node.js中到处都用EventEmitter,所以掌握它是很重要的。Node.js通过I/O操作获得的数据并广泛使用Events模块来支持异步编程

常见问题解答:

问:对于一个事件是否有最大侦听器数量的限制?
答:默认情况下,如果事件有操作10个侦听器,它会发出警告。不过,可以使用emitter.setMaxListener(n)来更改这个数量

问:是否可以侦听所有发送出来的事件?
答:不能。我们需要给每个想要响应的事件创建侦听器

--结束END--

本文标题: Node.js中HTTP模块与事件模块详解

本文链接: https://www.lsjlt.com/news/12038.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Node.js中HTTP模块与事件模块详解
    Node.js的http服务器 通过使用HTTP模块的低级API,Node.js允许我们创建服务器和客户端。刚开始学node的时候,我们都会遇到如下代码: var http = require('http...
    99+
    2022-06-04
    模块 详解 事件
  • Node.js中的HTTP模块与URL模块
    几乎每门编程语言都会包括网络这块,Node.js也不例外。今天主要是熟悉下Node.js中HTTP服务。其实HTTP模块是相当低层次的,它不提供路由、cookie、缓存等,像Web开...
    99+
    2022-11-13
  • node.js http模块概念详解
    目录node.js-http模块服务器相关概念什么是 http 模块http模块的作用创建最基本的web服务器创建web 服务器的步骤req请求对象res 响应对象中文乱码问题nod...
    99+
    2022-11-13
  • Node.js基础入门之path模块,url模块,http模块使用详解
    目录path模块1. path模块示例2. path模块其他方法url模块1. 旧的解析方法2. 新的解析方法http模块1. 什么是HTTP协议?2. HTTP协议约束的细节3. ...
    99+
    2022-11-13
  • Node.js 中的 fs 模块与Path模块方法详解
    概述: 文件系统模块是一个简单包装的标准 POSIX 文件 I/O 操作方法集。可以通过调用 require("fs") 来获取该模块。文件系统模块中的所有方法均有异步和同步版本。...
    99+
    2022-11-12
  • Node.js中path模块,url模块,http模块怎么用
    小编给大家分享一下Node.js中path模块,url模块,http模块怎么用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!path模块Node.js中,提供了一...
    99+
    2023-06-29
  • 详解Node.js:events事件模块
    Nodejs的大部分核心API都是基于异步事件驱动设计的,所有可以分发事件的对象都是EventEmitter类的实例。 大家知道,由于nodejs是单线程运行的,所以nodejs需要借助事件轮询,不断去查...
    99+
    2022-06-04
    详解 模块 事件
  • Node.js的HTTP模块、URL模块与supervisor工具介绍
    一、Node.js创建第一个应用 如果我们使用 PHP 来编写后端的代码时,需要 Apache 或者 Nginx 的 HTTP 服务器, 来处理客户端的请求相应。不过对 Node.j...
    99+
    2022-11-13
  • nodejs中的http模块与npm模块使用
    目录http模块创建服务器基本步骤request对象详解response对象详解实现静态WEB服务器服务器响应首页根据根据不同url,响应不同文件静态资源的通用处理npm - Nod...
    99+
    2022-11-13
    nodejs中http模块 nodejs中npm模块 http模块与npm模块使用
  • 一文详解Node中的文件模块与核心模块
    目录前言文件模块普通文件模块的查找自定义模块的查找文件模块的编译执行json 文件的编译执行JavaScript 文件的编译执行C/C++ 扩展模块的编译执行核心模块JavaScri...
    99+
    2022-11-13
  • node.js中http模块和url模块的简单介绍
    前言 本文主要给大家介绍了关于node.js中http模块与url模块的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧。 一、http模块的简单介绍 node.js当中的http内...
    99+
    2022-06-04
    模块 简单 js
  • 深入理解Node.js的HTTP模块
    前言 我们知道传统的HTPP服务器会由Aphche、Nginx、IIS之类的软件来担任,但是nodejs并不需要,nodejs提供了http模块,自身就可以用来构建服务器,而且http模块是由C++实现的,...
    99+
    2022-06-04
    模块 Node js
  • Node.js内置模块events事件监听发射详解
    目录引言事件的监听和发射移除事件监听其它一些方法监听器数量限制获取事件名称和监听器引言 在 vue 的项目中,有时我们会用到全局事件总线来管理组件之间的通信。vue2 项目里我们可...
    99+
    2023-02-17
    Node.js events事件监听发射 Node.js events内置模块
  • Node.js模块加载详解
    JavaScript是世界上使用频率最高的编程语言之一,它是Web世界的通用语言,被所有浏览器所使用。JavaScript的诞生要追溯到Netscape那个时代,它的核心内容被仓促的开发出来,用以对抗Mic...
    99+
    2022-06-04
    详解 模块 加载
  • python自带的http模块详解
    挺久没写博客了,因为博主开始了今年另一段美好的实习经历,学习加做项目,时间已排满;很感谢今年这两段经历,让我接触了golang和python,学习不同语言,可以跳出之前学习c/c++思维的限制,学习gola...
    99+
    2022-06-04
    自带 详解 模块
  • Node.js中http模块有什么用
    这篇文章给大家分享的是有关Node.js中http模块有什么用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。http模块网络作为信息传输,接收,共享的虚拟平台,通过它将各个点,面...
    99+
    2022-10-19
  • 一文带你了解Node.js中的http模块
    本篇文章给大家了解一下Node.js http模块,介绍一下使用http模块创建服务器的方法,希望对大家有所帮助!1、什么是http在百度百科的解释:超文本传输协议(Hyper Text Transfer Protocol,HTTP)是一个...
    99+
    2023-05-14
    nodejs​ node HTTP模块
  • 详解Node.js中的模块化方法
    目录一、模块化的基本概念1、什么是模块化2、模块化规范二、Node.js 中的模块化1、Node.js 中的模块化分类2、加载模块3、向外共享模块作用域中的成员4、Node.js 中...
    99+
    2022-11-12
  • 详解python时间模块中的datetime模块
    Python提供了多个内置模块用于操作日期时间,像calendar,time,datetime。time模块我在之前的文章已经有所介绍,它提供的接口与C标准库time.h基本一致。相比于time模块,dat...
    99+
    2022-06-04
    模块 详解 时间
  • Node.js中的http模块怎么使用
    本篇内容介绍了“Node.js中的http模块怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1、什...
    99+
    2022-10-19
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作