node.js - 其他网站的渲染方用 express

标签 node.js express pug

我有一个基本的 Express 应用程序,其中一个函数使用 nodejs 请求并使用选择器获取一些 div。之后,我想用 Jade 来渲染它。

var express = require('express');
var voc = require('vocabulaire');
var async = require('async');

var router = express.Router();

router.get('/', function (req, res) {
    res.render('index', {title: 'Espace de la diffusion'});
});

var result;
router.get('/search/:mot', function (req, res) {
    async.series([
        function () {
            result = main(['conj', req.params.mot]);
            console.log('in 1');
        },
        function () {

            res.render('index', {title: 'Espace de la diffusion', data: result});
            res.send(html);
            console.log('in 2');
        },
    ]);    
});    

module.exports = router;


var request = require('request')
    , cheerio = require('cheerio');

function doit(verbe, result) {
    var url = 'http://www.babla.ru/%D1%81%D0%BF%D1%80%D1%8F%D0%B6%D0%B5%D0%BD%D0%B8%D1%8F/%D1%84%D1%80%D0%B0%D0%BD%D1%86%D1%83%D0%B7%D1%81%D0%BA%D0%B8%D0%B9/' + verbe;

    request(url, function (err, resp, body) {
        $ = cheerio.load(body);
        var temps = $('.span4.result-left h5');
        if (temps.length == 0) {
            console.log('results not found');
        }
        else {
            console.log('result found');
            debugger;
            return $('.span4.result-left');
        }
    });
}


function main(arg) {
    switch (arg[0]) {
        case 'conj':
            return doit(arg[1]);
            break;
        default:
            console.log('unknown parameter');
            break;
    }
}

我使用了异步库来确保我的结果已准备好渲染,但在控制台中我看到了下一个:

GET/search/est - - ms - -
在 1
找到结果

调试器跟随我到nodejs函数makeTick().. 我不知道该怎么办......请帮助我。

最佳答案

您的 async.series() 函数缺少您需要调用才能执行下一个函数的 callback 参数。但是,您实际上并不需要 async 来执行单个异步任务:

main(['conj', req.params.mot], function(err, result) {
  res.render('index', {title: 'Espace de la diffusion', err: err, data: result});
});

// ...

function doit(verbe, result, callback) {
    var url = 'http://www.babla.ru/%D1%81%D0%BF%D1%80%D1%8F%D0%B6%D0%B5%D0%BD%D0%B8%D1%8F/%D1%84%D1%80%D0%B0%D0%BD%D1%86%D1%83%D0%B7%D1%81%D0%BA%D0%B8%D0%B9/' + verbe;

    request(url, function (err, resp, body) {
        if (err)
          return callback && callback(err);

        $ = cheerio.load(body);
        var temps = $('.span4.result-left h5');
        if (temps.length == 0) {
            callback && callback();
        }
        else {
            callback && callback(null, $('.span4.result-left'));
        }
    });
}


function main(arg, callback) {
    switch (arg[0]) {
        case 'conj':
            doit(arg[1], callback);
            break;
        default:
            callback && callback(new Error('unknown parameter'));
            break;
    }
}

关于node.js - 其他网站的渲染方用 express ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31798177/

相关文章:

ios - Node 安装cordova/ionic/Foundation/Foundation.h未找到

express - 如何更改 Apollo Express 服务器中的订阅服务器端点?

node.js - 从 Node 服务器随机流式传输 pdf 文件只在浏览器上显示二进制数据

html - Pug 中的多行变量(前 Jade)

node.js - 尝试在nodejs中将textarea转换为十六进制

node.js - TypeScript 编译中缺少 Carousel.d.ts。请通过 'files' 或“include”属性确保它位于您的 tsconfig 中

node.js - 为 Node.js 重写 PHP URL

node.js - 如何在expressjs中调用静态html页面

javascript - 如何在jade中编写javascript block ?

node.js - Connect-Flash 和 Express 给了我多条消息但没有输入