效果图
需求分期
- 服务端输入搜索内容,服务端实现搜索结果返回客户端
- 服务端将该搜索结果打印出来
程序实现
服务端
//引入http模块
const http = require('http');
//引入querystring模块
const qs = require('querystring');
//引入cheerio模块
const ci = require('cheerio');
//引入colors模块
require('colors');
//搜索结果
var fruits = [];
//搜索是否完成
var isearch = false;
//创建一个HTTP服务器
const serv = http.createServer((req, res) => {
let body = '';
req.on('data', (data) => {
body += data;
});
req.on('end', () => {
let data = qs.parse(body);
fruits = [];
search(data.name, 1);
setInterval(() => {
if (isearch) {
res.writeHead(200);
res.end('搜索结果\n' + fruits.join(''));
}
}, 1000);
})
});
//启动监听
serv.listen(3000, () => {
console.log('服务已启动'.yellow);
});
//搜索
function search(val, pn) {
if (pn < 500) {
http.request({
host: 'www.baidu.com',
path: '/s?' + qs.stringify({ wd: val, pn: pn })
}, (res) => {
//接收返回的html
let html = '';
res.setEncoding('utf-8');
res.on('data', (data) => {
html += data;
});
res.on('end', () => {
$ = ci.load(html);
let fs = [];
let s = $('h3.t').each(function(i, elem) {
fs.push($(this).text() + '\n');
});
fruits.push(fs.join(' '))
pn += 10;
search(val, pn);
fruits = fruits;
})
}).end();
} else {
isearch = true;
};
}
客户端
//引入http模块
const http = require('http');
//引入querystring模块
const qs = require('querystring');
//引入colors模块
require('colors');
//往服务器发送消息
function send(theName) {
//创建一个客户端请求
http.request({
host: '127.0.0.1',
port: 3000,
url: '/',
method: 'POST'
}, (res) => {
// 获取服务端响应
let body = '';
//设置编码
res.setEncoding('utf-8');
//接收响应数据
res.on('data', (data) => {
body += data;
});
//接收完毕回调
res.on('end', () => {
console.log(body.blue);
});
}).end(qs.stringify({ name: theName }));
}
process.stdout.write('请输入你的搜索内容:'.red);
process.stdin.resume();
process.stdin.setEncoding('utf-8');
process.stdin.on('data', (data) => {
console.log('搜索中...'.red);
send(data.replace('\r\n', ''));
})