var router = require('koa-router')();
// 发起get请求
var request = require("request");
// 载入HTML
var cheerio = require('cheerio');
var _ = require('lodash')
var redis = require("redis"),
client = redis.createClient();
client.on("error", function (err) {
console.log("Error " + err);
});
// 最后返回的结果
var ret = [];
function reqst(key){
client.get(key,(err,reply)=>{
if(reply==null){
request({
method:"GET",
url:encodeURI(`http://news.baidu.com/ns?cl=2&rn=20&tn=news&word=${key}`)
},(err,res,body)=>{
if(err){
console.log(err)
}
else if(!err&&res.statusCode==200){
let $ = cheerio.load(body);
let res = Array.from($(".result")).splice(0,5);
let tmp = [];
for (var i = res.length - 1; i >= 0; i--) {
let cell = {
title:$(res[i]).find('.c-title').text(),
author:$(res[i]).find('.c-author').text(),
summary:$(res[i]).find('.c-summary').text(),
}
tmp.unshift(cell);
ret.unshift(cell);
}
client.set(key,JSON.stringify(tmp))
}
})
}
else{
ret = ret.concat(JSON.parse(reply));
}
})//client get
console.log(ret);
return true;
}
router.get('/', async function (ctx, next) {
let keys = JSON.parse(ctx.query.key).split(',')
let arr = [];
_.each(keys,(key)=>{
arr.push(reqst(key))
})
Promise.all(arr).then(res=>{
},err=>{
console.log(err);
})
ctx.state = {
title: '搜索结果页面',
ret:ret
};
await ctx.render('results');
ret =[]
}
)
module.exports = router;
因为是异步,回调外面的变量先执行了