search

Home  >  Q&A  >  body text

node.js - superagent抓取内容后如何传值?

'use strict'
var superagent = require("superagent");
var cheerio = require('cheerio');
var express = require('express');

var app = express();
app.set('view engine', 'ejs');

var htmlContent = '';
app.get('/', function(req, res1) {
    //htmlContent = '';   
    superagent
        .get('http://www.oschina.net/')
        .end(function(err, res) {
            let $ = cheerio.load(res.text, {
                decodeEntities: true
            });
            $('#IndustryNews .p1 a').each((id, element) => {
                let reg = new RegExp("^\/news", "g");
                let reg1 = new RegExp("^\/p", "g");
                let address = $(element).attr('href');
                if (reg.test($(element).attr('href')) || reg1.test($(element).attr('href'))) {
                    address = 'http://www.oschina.net' + $(element).attr('href');
                }
                htmlContent += '<a href=\"' + address + '\" target=\"_balank\">' + $(element).text() + '</a><br><br>';
                    
            });
             res1.render('index', {
                    'htmlContent': htmlContent,
                });
        });
    // res1.render('index', {
    //    'htmlContent': htmlContent,
    // });
});
app.listen(80, function() {
    console.log('Example app listening on port 80!');
});

这段程序是获取 oschina.net 上部分左侧的新闻内容的,具体问题如下:
1.如果superagent写一个函数里,如何将htmlContent作为函数的返回值?
2.如果还像这么样写,回调函数的htmlContent如何赋值到外层的htmlContent?
3.能否将superagent赋值一个变量,然后进行处理?我试过但是赋值后的结果遍历都是一些方法?

小弟初学,多谢各位了

天蓬老师天蓬老师2863 days ago597

reply all(2)I'll reply

  • PHP中文网

    PHP中文网2017-04-17 14:40:50

    'use strict'
    var superagent = require("superagent");
    var cheerio = require('cheerio');
    var express = require('express');
    var co = require('co');
    
    var app = express();
    app.set('view engine', 'ejs');
    
    function getContent(url) {
        return new Promise((resolve, reject) => {
            let htmlContent = '';
            let v2exContent = '';
            if (url === 'oschina') {
                superagent
                    .get('http://www.oschina.net/')
                    .end(function(err, res) {
                        if (err) {
                            reject(err);
                        }
                        let $ = cheerio.load(res.text, {
                            decodeEntities: true
                        });
    
                        $('#IndustryNews .p1 a').each((id, element) => {
                            // console.log(element);
                            // let $element = $;
                            let reg = new RegExp("^\/news", "g");
                            let reg1 = new RegExp("^\/p", "g");
                            let address = $(element).attr('href');
                            if (reg.test($(element).attr('href')) || reg1.test($(element).attr('href'))) {
                                address = 'http://www.oschina.net' + $(element).attr('href');
                            }
                            htmlContent += '<a href=\"' + address + '\" target=\"_balank\">' + $(element).text() + '</a><br><br>';
                        });
                        resolve(htmlContent);
                    });
            } else {
                superagent
                    .get('https://www.v2ex.com/api/topics/hot.json')
                    .end(function(err, res) {
                        let v2ex = '';
                        let arr = JSON.parse(res.text);
                        if (res != '') {
                            
                            for (let i = 0; i < arr.length; i++) {
                                // console.log(arr[i]);
                                v2exContent += '<a href=\"' + arr[i].url + '\" target=\"_balank\">' + arr[i].title + '</a><br><br>';
                            }
                        }
                        resolve(v2exContent);
                    });
            }
        })
    
    
    }
    
    
    app.get('/', function(req, res1) {
        let gen = function*() {
                let c1 = yield getContent('oschina');
                let c2 = yield getContent('v2ex');
                res1.render('index', {
                    'htmlContent': c1,
                    'v2exContent': c2,
                });
            }
            //console.log(htmlContent)
        co(gen).then(() => {
            // console.log('111');
        })
    });
    
    app.listen(80, function() {
        console.log('Example app listening on port 80!');
    });
    

    reply
    0
  • 怪我咯

    怪我咯2017-04-17 14:40:50

    var code = function(dosome){
        superagent.end(function(){
            get html
            dosome(html);
        });
    }
    
    code(function(html){
        alert(html)
    });

    reply
    0
  • Cancelreply