事件 events 模块

原生事件写法

/*

* 1. 事件分类

* DOM0级 事件 - on + eventType

* DOM2级 事件 - 事件监听

* 2. 事件构成部分有哪些? dom.onclick = function () {}

* 事件源

* 事件类型 click change ...

* 事件处理程序

* 3. 事件绑定形式有哪些?

* dom.onclick = function () {}

* 事件监听 dom.addEventListener('click',function(){},false)

* 元素绑定

*/

Node.js 事件驱动

问题: Node.js中有DOM吗?

没有

结论: 原生js DOM 事件都不能用

创建了一个叫做 events 内置模块来解决这个问题

const events= require('events');

//events.EventEmitter//构造函数

console.log(events.EventEmitter.prototype)//原型链

/*

EventEmitter {

_events: undefined,

_eventsCount: 0,

_maxListeners: undefined,

setMaxListeners: [Function: setMaxListeners],

getMaxListeners: [Function: getMaxListeners],

emit: [Function: emit],

addListener: [Function: addListener],

on: [Function: addListener],

prependListener: [Function: prependListener],

once: [Function: once],

prependOnceListener: [Function: prependOnceListener],

removeListener: [Function: removeListener],

off: [Function: removeListener],

removeAllListeners: [Function: removeAllListeners],

listeners: [Function: listeners],

rawListeners: [Function: rawListeners],

listenerCount: [Function: listenerCount],

eventNames: [Function: eventNames]

}

*/

const archetype=events.EventEmitter.prototype;

// archetype.on(事件,事件处理函数) 作用发布

// archetype.emit(事件名,实际参数) 作用订阅

archetype.on('handler',(val)=>{

console.log('事件触发',val);

})

archetype.emit('handler',111)

Readline模块逐行读取文本内容

readline 模块提供了一个接口,用于一次一行地读取可读流(例如 process.stdin)中的数据。

const readline = require('readline');

const rl = readline.createInterface({

input: process.stdin,

output: process.stdout

});

rl.question('你如何看待 Node.js 中文网?', (answer) => {

// TODO:将答案记录在数据库中。

console.log(`感谢您的宝贵意见:${answer}`);

rl.close();

});

const readline = require('readline');

const fs = require('fs');

const rl = readline.createInterface({

input: fs.createReadStream('sample.txt')

});

rl.on('line', (line) => {

console.log('Line from file:', line);

});

简易爬虫

/*

* 爬虫

* 1. 进行数据请求,获取网页内容 http

* 2. 进行数据分析、数据清洗

* 3. 发送给我们自己的网页

*/

const http=require('http')

//获取 JSON 的示例:

http.get('http://jsonplaceholder.typicode.com/albums', (res) => {

/* res就是我得到的返回值 */

const { statusCode } = res;//状态码

const contentType = res.headers['content-type'];//得到的文件类型

// 错误代码处理

let error;

if (statusCode !== 200) {

error = new Error('请求失败\n' +

`状态码: ${statusCode}`);

} else if (!/^application\/json/.test(contentType)) {

error = new Error('无效的 content-type.\n' +

`期望的是 application/json 但接收到的是 ${contentType}`);

}

if (error) {

console.error(error.message);

// 消费响应数据来释放内存。

res.resume();//重新发起数据

return;

}

res.setEncoding('utf8');//中文编码

let rawData = '';//真实数据

res.on('data', (chunk) => { rawData += chunk; });// 通过data事件将数据分片,然后逐片添加到rawData身上,好处就是当我们执行每一个分片的小任务时,至少给其他任务提供了可执行的机会

res.on('end', () => {//结束

try {// 高级编程 错误捕获

const parsedData = JSON.parse(rawData);

console.log(parsedData);

} catch (e) {

console.error(e.message);

}

});

}).on('error', (e) => {

console.error(`出现错误: ${e.message}`);

});

const http=require('http');

const cheerio=require('cheerio')

const options={

hostname: 'jx.1000phone.net',

port: 80,

path: '/teacher.php/Class/classDetail/param/rqiWlsefmajGmqJhXXWhl3ZiZ2Zn',

method: 'GET',

headers: {

Accept: 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',

'Accept-Encoding': 'gzip, deflate',

'Accept-Language': 'zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7',

'Cache-Control': 'no-cache',

Connection: 'keep-alive',

Cookie: 'PHPSESSID=ST-117984-IVZSfYMlr9YXvRfFRm-A1TimOeA-izm5ejd5j1npj2pjc7i3v4z',

Host: 'jx.1000phone.net',

Pragma: 'no-cache',

Referer: 'http://jx.1000phone.net/teacher.php/Class/index',

'Upgrade-Insecure-Requests': 1,

'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36',

'Content-Type': 'application/x-www-form-urlencoded',

'Content-Length': 0

}}

http.get(options, (res) => {

const { statusCode } = res;

const contentType = res.headers['content-type'];

res.setEncoding('utf8');

let rawData = '';

res.on('data', (chunk) => { rawData += chunk; });

res.on('end', () => {

try {

const $=cheerio.load(rawData);

$('.student a').each(function(item,index){

console.log($(this).text());

})

} catch (e) {

console.error(e.message);

}

});

}).on('error', (e) => {

console.error(`出现错误: ${e.message}`);

});

爬虫如何监听插件_NodeJS概述2-事件插件-简易爬虫相关推荐

  1. 综合设计一个OPPE主页--页面的插件引用(animate.css)--d动画的使用--滚轮或鼠标到该位置时,才有动画的切换---所以我们需要用jquery监听鼠标滚轮的滚动事件

    Animate.css | A cross-browser library of CSS animations. 里面有许多css的效果 首先使用 animate.css文件 link rel=&qu ...

  2. java 监听鼠标点击_java 事件监听 - 鼠标

    java 事件监听 - 鼠标 //事件监听 //鼠标事件监听 //鼠标事件监听有两个实现接口 //1.MouseListener 普通的鼠标操作 //2.MouseMotionListener 鼠标的 ...

  3. 13、Java Swing事件监听:事件处理模型和事件监听器

    事件表示程序和用户之间的交互,例如在文本框中输入,在列表框或组合框中选择,选中复选框和单选框,单击按钮等.事件处理表示程序对事件的响应,对用户的交互或者说对事件的处理是事件处理程序完成的. 当事件发生 ...

  4. vue监听移动设备的返回事件

    在公共方法文件common.js中实现一个存储当前历史记录的方法 common.js // 存储当前历史记录点,实现控制手机物理返回键的按钮事件 var pushHistory = function ...

  5. vue让元素固定_vue 监听dom元素的滚动事件 实现某元素吸顶或者固定位置显示

    孤单的是人,寂寞的是心. 这只是我写的一个简单的demo,但是所需数据与逻辑已走通, 拿走就能用的那种,希望你能看完 区域 价格 房型 更多 更多 更多 更多 更多 更多 更多 更多 更多 更多 更多 ...

  6. android通知栏的点击事件,Android监听消息通知栏点击事件

    Android监听消息通知栏点击事件 使用BroadCastReceiver 1 新建一个NotificationClickReceiver 类,并且在清单文件中注册!! public class N ...

  7. iOS小技能:监听H5页面goBack返回事件 网页监听APP返回键 (NavigationBackItemInjection)

    文章目录 引言 I . iOS监听H5页面goBack返回事件 1.1 UIWebView 监听H5页面goBack返回事件 1.2 WKWebView监听H5页面goBack返回事件 II. 网页监 ...

  8. esc键退出全屏 vue_解决了VUE在浏览器全屏下监听不到Esc键盘事件

    说明: 实测可以在谷歌.火狐.360 浏览器使用 解决了在浏览器全屏下监听不到键盘Esc事件 解决了取消全屏和全屏的同步问题,ESC按键下可以同步 以下是完整的代码, // data() { retu ...

  9. 解决VUE在浏览器全屏下监听不到Esc键盘事件

    实测可以在谷歌.火狐.360 浏览器使用 解决了在浏览器全屏下监听不到键盘Esc事件 解决了取消全屏和全屏的同步问题,ESC按键下可以同步 以下是完整的代码, // data() {return {i ...

最新文章

  1. python字典怎么排序_如何对python的字典进行排序
  2. 我的jQuery动态表格插件二
  3. Redis 你该懂的点
  4. 设计模式--门面(Facade)模式
  5. UNITY 手游(安卓)如何使用C/C++代码
  6. linux系统给jvm分配来多少内存
  7. oracle主备库查询,oracle11g dataguard 备库数据同步的检查方法
  8. 移植U-Boot.1.3.1到S3C2440和S3C2410
  9. MySQL数据库数据分开存储
  10. javascript HTMLMediaElement
  11. 2017年个人工作总结
  12. 读写SQL数据库Image字段
  13. UML进行Linux内核调试
  14. C语言判断素数的三种方法 判断素数(质数)
  15. java工程师英文简历_java软件工程师英文简历模板
  16. 无线摄像头接有线如何改协议_WiFi中继器——让无线传输更简单
  17. ffmpeg下载安装,以及springboot 整合视频点播学习
  18. 网页全终端安防视频流媒体播放器EasyPlayer.js如何实现在web浏览器播放H.265编码视频?
  19. 说谎者的辩白 -卢梭
  20. 持续集成:通过Jenkins API创建项目和节点

热门文章

  1. C语言逻辑填空题——审问嫌疑犯
  2. 如何更换ppt模板内容不变_如何制作一个优秀的PPT?附18000+套精品PPT模板
  3. 国产数据库发展十策(二):数据库难在研发还是难在生态?
  4. PostgreSQL的几种分布式架构对比
  5. 来了!汇总数据库行业最新招聘、热门资讯、精选文章...
  6. 学习笔记:2019 张小龙在微信公开课上的演讲
  7. 生产环境频繁内存溢出,原来就是因为这个“String类”
  8. 这几个动态规划的问题,面试官就爱问
  9. JavaScript回调函数的高手指南
  10. 3分钟了解ServiceStage 应用智能化运维【华为云分享】