Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript http.get或http.request回调仅在shell-node.js中显示_Javascript_Node.js - Fatal编程技术网

Javascript http.get或http.request回调仅在shell-node.js中显示

Javascript http.get或http.request回调仅在shell-node.js中显示,javascript,node.js,Javascript,Node.js,新到节点,并尝试不做任何回调地狱 我有两个文件 routes.js fetch.js //routes.js var fetchController = require("../lib/mtl_fetcher/fetcher_controller"); var express = require('express'); var router = express.Router(); router.get('/', function(req, res, next) { res.send(f

新到节点,并尝试不做任何回调地狱

我有两个文件
routes.js
fetch.js

//routes.js
var fetchController = require("../lib/mtl_fetcher/fetcher_controller");
var express = require('express');
var router = express.Router();

router.get('/', function(req, res, next) {
    res.send(fetchController.getAllTransgressor(function(results) { 
        return results.end();
    }))
});

module.exports = router;

因此,目标是获取,然后将已获取的内容显示在屏幕上。ressource是基于XML的

在一个块(routes.js)中完成所有这些都是可行的,但是当我尝试重构并设置一些模块化时,我的
str
只显示在shell stdout中


使用
req.end()

router.get('/', function(req, res, next) {
    fetchController.getAllTransgressor(function(error, results) { 
        if ( error ) {
            // handle errors
        } else {
            res.send(results);
        }
    });
});
回调函数也是如此,在请求和解析之后,必须在数据可用时调用回调函数

module.exports.getAllTransgressor = function(callback) {

  var req = http.get(config.urlOptions.host, function(response) {
    var bufferChunk = [];

    if (response.statusCode == 200) {

      response.on('data', function(chunk) {
        bufferChunk.push(chunk);
      });

      response.on('end', function() {
        var iconv = Iconv('latin1', 'UTF-8');
        var str   = iconv.convert(Buffer.concat(bufferChunk)).toString();

        callback(null, str); // here, stuff is available
      });

    } else {
      callback('Did not return 200', err);
    }
  });

  req.on("error", function(err) {
    callback(err, null);
  });

}

我试过这样的东西。在尝试将回调传递给http.get()时,我遇到了
回调(null,str)不是函数。这是因为您已将
回调
重新定义为
结束
的参数,该函数没有回调。我已经从上面的代码中删除了这个参数。仍然是一个空白页。我有与您相同的代码,结果是
routes.js
使用console.log正确显示结果。它不再与回调处理相关。因此,您在路由中获得
结果
,但是
send()
没有显示它?如果您尝试只发送('something')
,您看到了吗?找到了,它与XML相关,我只是转换了它,它很好。谢谢你教我如何解决这个问题:)
module.exports.getAllTransgressor = function(callback) {

  var req = http.get(config.urlOptions.host, function(response) {
    var bufferChunk = [];

    if (response.statusCode == 200) {

      response.on('data', function(chunk) {
        bufferChunk.push(chunk);
      });

      response.on('end', function() {
        var iconv = Iconv('latin1', 'UTF-8');
        var str   = iconv.convert(Buffer.concat(bufferChunk)).toString();

        callback(null, str); // here, stuff is available
      });

    } else {
      callback('Did not return 200', err);
    }
  });

  req.on("error", function(err) {
    callback(err, null);
  });

}