Node.js无法为响应调用undefined方法'on'

时间:2015-07-27 23:42:59

标签: node.js

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,请告诉我。

2 个答案:

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