搜索
首页web前端js教程Node.js中HTTP模块与事件模块详解_node.js

Node.js的http服务器

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

复制代码 代码如下:

var http = require('http');
http.createServer(function (req,res) {
    res.end('Hello World\n');
}).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)来更改这个数量

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

声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
Vercel是什么?怎么部署Node服务?Vercel是什么?怎么部署Node服务?May 07, 2022 pm 09:34 PM

Vercel是什么?本篇文章带大家了解一下Vercel,并介绍一下在Vercel中部署 Node 服务的方法,希望对大家有所帮助!

node.js gm是什么node.js gm是什么Jul 12, 2022 pm 06:28 PM

gm是基于node.js的图片处理插件,它封装了图片处理工具GraphicsMagick(GM)和ImageMagick(IM),可使用spawn的方式调用。gm插件不是node默认安装的,需执行“npm install gm -S”进行安装才可使用。

怎么使用pkg将Node.js项目打包为可执行文件?怎么使用pkg将Node.js项目打包为可执行文件?Jul 26, 2022 pm 07:33 PM

如何用pkg打包nodejs可执行文件?下面本篇文章给大家介绍一下使用pkg将Node.js项目打包为可执行文件的方法,希望对大家有所帮助!

一文解析package.json和package-lock.json一文解析package.json和package-lock.jsonSep 01, 2022 pm 08:02 PM

本篇文章带大家详解package.json和package-lock.json文件,希望对大家有所帮助!

分享一个Nodejs web框架:Fastify分享一个Nodejs web框架:FastifyAug 04, 2022 pm 09:23 PM

本篇文章给大家分享一个Nodejs web框架:Fastify,简单介绍一下Fastify支持的特性、Fastify支持的插件以及Fastify的使用方法,希望对大家有所帮助!

node爬取数据实例:聊聊怎么抓取小说章节node爬取数据实例:聊聊怎么抓取小说章节May 02, 2022 am 10:00 AM

node怎么爬取数据?下面本篇文章给大家分享一个node爬虫实例,聊聊利用node抓取小说章节的方法,希望对大家有所帮助!

手把手带你使用Node.js和adb开发一个手机备份小工具手把手带你使用Node.js和adb开发一个手机备份小工具Apr 14, 2022 pm 09:06 PM

本篇文章给大家分享一个Node实战,介绍一下使用Node.js和adb怎么开发一个手机备份小工具,希望对大家有所帮助!

图文详解node.js如何构建web服务器图文详解node.js如何构建web服务器Aug 08, 2022 am 10:27 AM

先介绍node.js的安装,再介绍使用node.js构建一个简单的web服务器,最后通过一个简单的示例,演示网页与服务器之间的数据交互的实现。

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
2 周前By尊渡假赌尊渡假赌尊渡假赌
仓库:如何复兴队友
1 个月前By尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
4 周前By尊渡假赌尊渡假赌尊渡假赌

热工具

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

螳螂BT

螳螂BT

Mantis是一个易于部署的基于Web的缺陷跟踪工具,用于帮助产品缺陷跟踪。它需要PHP、MySQL和一个Web服务器。请查看我们的演示和托管服务。

MinGW - 适用于 Windows 的极简 GNU

MinGW - 适用于 Windows 的极简 GNU

这个项目正在迁移到osdn.net/projects/mingw的过程中,你可以继续在那里关注我们。MinGW:GNU编译器集合(GCC)的本地Windows移植版本,可自由分发的导入库和用于构建本地Windows应用程序的头文件;包括对MSVC运行时的扩展,以支持C99功能。MinGW的所有软件都可以在64位Windows平台上运行。

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)