1
新的節點,並試圖不做任何回調地獄。http.get或http.request回調僅在shell中顯示 - 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(fetchController.getAllTransgressor(function(results) {
return results.end();
}))
});
module.exports = router;
和
//fetch.js
var http = require('http');
var config = require('./config')
var Iconv = require('iconv').Iconv
module.exports.getAllTransgressor = function(callback) {
var req = http.get(config.urlOptions.host, function (response) {
var bufferChunk = [];
var str
if(response.statusCode == 200) {
response.on('data', function(chunk) {
bufferChunk.push(chunk);
})
response.on('end', function(callback) {
var iconv = Iconv('latin1', 'UTF-8');
str = iconv.convert(Buffer.concat(bufferChunk)).toString();
console.log(str)
});
} else {
console.log("handle this")
}
});
req.on("error", function(err) {
callback(err);
});
callback(req)
}
因此我們的目標是獲取,然後會顯示已經獲取到屏幕上。資源是XML基礎。
在一個塊(routes.js)中完成所有這些工作,但是當我嘗試重構並設置一些模塊時,我的str
只是在shell標準輸出中顯示。使用req.end()
不會發回內容。
我試過類似這樣的東西。嘗試將回調傳遞給http.get()時,我遇到'callback(null,str)不是函數'。 – Pobe
這是因爲你已經將'callback'重新定義爲'end'的參數,它沒有回調。我已經從上面的代碼中刪除了這個參數。 – adeneo
仍然是一個空白頁面。我和你有相同的代碼,導致'routes.js'使用console.log正確顯示結果。它不再涉及回調處理。 – Pobe