模拟搜索机制(最low的那种)
我们实现了简单的数据交互后 甚至可以模拟一下最low的搜索机制
及获取网页源代码然后搜索其中的数据比如标题h1~h6,图片的title alt,还有一些关键字。
因此我们需要做的第一件事就是获取网页源码
const https = require('https');
https.get(url, res => {
var html = '';
res.on('data', chunk => {
html += chunk;
});
res.on('end', () => {
console.log(html);
});
res.on('error', error => {
console.log(error);
});
});
得到的源码一部分
这时我们要思考,我们要如何在这长得吓人的源码中搜索到我们自己需要的关键字,或者关键标签呢
我们知道,操作字符串是真的浪费性能还麻烦,这是有没有怀念JQ中对象选择器
实不相瞒 还真有这样的第三方 cheerio 老规矩 API请怀着感恩的心去基友网上看
这里 我获取了百度新闻 一级导航的内容
const https = require('https');
const cheerio = require('cheerio');//引入模块
const url = 'https://news.baidu.com';//设置地址
function filterMenu(html) {//封装一个函数
var $ = cheerio.load(html);//cheerio 下面的方法
var menu = $('.menu-list li');// 类jq 对象选择器
var menuData = [];
menu.each(function(index, value) {
var menuTitle = $(value)
.find('a')
.text(); //类似jq的链式操作 和find方法
menuData.push(menuTitle);
});
return menuData;
}
https.get(url, res => {//正常的 get请求
var html = '';
res.on('data', chunk => {
html += chunk;
});
res.on('end', () => {
console.log(filterMenu(html));
});
res.on('error', error => {
console.log(error);
});
});
此时我们就活的过经过过滤的信息了 一目了然
发布订阅模式
利用 内置 events 模块 模拟简单的发布订阅模式
发布订阅模式,基于一个主题/事件通道,希望接收通知的对象(称为subscriber)通过自定义事件订阅主题,被激活事件的对象(称为publisher)通过发布主题事件的方式被通知。
就和用户订阅音乐软件一样,一首歌可以被多个用户同时订阅,用户只要提交请求,用户就能接收到歌曲。下面模拟下
const EventEmitter = require('events');
class Player extends EventEmitter{};//继承
var player = new Player();//实例化
player.on('play',track=>{//接受请求
console.log(`正在播放<<${track}>>`);
})
player.emit('play','国歌');//提交请求
player.emit('play','wait');
输出结果
正在播放<<国歌>>
正在播放<<wait>>