get方法一直有效,直到我添加了额外的代码:
var io = require('socket.io');
var express = require('express');
var app = express();
var fs = require('fs');
var http = require("http"),
faroo_api = 'hidden',
url = "http://www.faroo.com/api?q=knicks&start=1&length=10&l=en&src=news&f=json&key=";
var request = http.get(url + faroo_api, function (err, response) {
var buffer = "",
data;
if(err){
console.log("there was an error");
}
response.on("data", function (chunk) {
buffer += chunk;
});
response.on("end", function (err) {
data = JSON.parse(buffer);
console.log(data);
});
});
var serv = http.createServer(function(request, res){
fs.readFile(__dirname + '/text.html', function(err, data){
if(err){
res.writeHead(500, {'Content-Type': 'text/plain'});
return res.end('Error');
}
res.writeHead(200, {'Content-Type': 'text/html'});
res.end(data);
});
});
serv.listen(8000);
var serv_io = io.listen(serv);
serv_io.on('connection', function(socket){
socket.emit('messages', data);
});
现在它给出了此错误消息。我不确定出了什么问题。我猜测反应被某些东西阻挡但我不确定。
there was an error
/Users/AmmarKarim/Desktop/Apps/Projectapp/app.js:21
response.on("data", function (chunk) {
^
TypeError: Cannot call method 'on' of undefined
at ClientRequest.<anonymous> (/Users/AmmarKarim/Desktop/Apps/Projectapp/app.js:21:14)
at ClientRequest.g (events.js:180:16)
at ClientRequest.emit (events.js:95:17)
at HTTPParser.parserOnIncomingClient [as onIncoming] (http.js:1693:21)
at HTTPParser.parserOnHeadersComplete [as onHeadersComplete] (http.js:122:23)
at Socket.socketOnData [as ondata] (http.js:1588:20)
at TCP.onread (net.js:528:27)
如果您需要html,请告诉我。
答案 0 :(得分:0)
function (err, response)
这是错误的回调。对http.get(和http.request)的回调只是function (response)
答案 1 :(得分:0)
请参阅此演示:
http.get(options [,callback])#由于大多数请求都是GET请求 没有实体,Node提供了这种方便的方法。唯一的 这个方法和http.request()之间的区别在于它设置了 GET的方法并自动调用req.end()。
示例:
http.get("http://www.google.com/index.html", function(res) {
console.log("Got response: " + res.statusCode);
}).on('error', function(e) {
console.log("Got error: " + e.message);
});