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);
});
}