效果圖
需求分期
- 服務(wù)端輸入搜索內(nèi)容逛薇,服務(wù)端實現(xiàn)搜索結(jié)果返回客戶端
- 服務(wù)端將該搜索結(jié)果打印出來
程序?qū)崿F(xiàn)
服務(wù)端
//引入http模塊
const http = require('http');
//引入querystring模塊
const qs = require('querystring');
//引入cheerio模塊
const ci = require('cheerio');
//引入colors模塊
require('colors');
//搜索結(jié)果
var fruits = [];
//搜索是否完成
var isearch = false;
//創(chuàng)建一個HTTP服務(wù)器
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('搜索結(jié)果\n' + fruits.join(''));
}
}, 1000);
})
});
//啟動監(jiān)聽
serv.listen(3000, () => {
console.log('服務(wù)已啟動'.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');
//往服務(wù)器發(fā)送消息
function send(theName) {
//創(chuàng)建一個客戶端請求
http.request({
host: '127.0.0.1',
port: 3000,
url: '/',
method: 'POST'
}, (res) => {
// 獲取服務(wù)端響應(yīng)
let body = '';
//設(shè)置編碼
res.setEncoding('utf-8');
//接收響應(yīng)數(shù)據(jù)
res.on('data', (data) => {
body += data;
});
//接收完畢回調(diào)
res.on('end', () => {
console.log(body.blue);
});
}).end(qs.stringify({ name: theName }));
}
process.stdout.write('請輸入你的搜索內(nèi)容:'.red);
process.stdin.resume();
process.stdin.setEncoding('utf-8');
process.stdin.on('data', (data) => {
console.log('搜索中...'.red);
send(data.replace('\r\n', ''));
})
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者