javascript - koa 进行爬虫。全局变量的值无法改变?
大家讲道理
大家讲道理 2017-04-11 09:11:53
[JavaScript讨论组]
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;
大家讲道理
大家讲道理

光阴似箭催人老,日月如移越少年。

全部回复(1)
天蓬老师

因为是异步,回调外面的变量先执行了

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号