Node.js NodeJS+;Socket.IO可以';不要让json返回

Node.js NodeJS+;Socket.IO可以';不要让json返回,node.js,angularjs,socket.io,Node.js,Angularjs,Socket.io,我正在使用Socket.IO、AngularJS、Request和Express,并试图从请求中提取一些数据,然后将其发送给客户端。以下是我的职能: var getJsonFromJsonP = function (url, callback) { request(url, function (error, response, body) { if (!error && response.statusCode == 200) {

我正在使用Socket.IO、AngularJS、Request和Express,并试图从请求中提取一些数据,然后将其发送给客户端。以下是我的职能:

    var getJsonFromJsonP = function (url, callback) {
        request(url, function (error, response, body) {
            if (!error && response.statusCode == 200) {
                var jsonpData = body;
                var json;
                try {
                   json = JSON.parse(jsonpData);
                }
                catch(e) {
                    var startPos = jsonpData.indexOf('({');
                    var endPos = jsonpData.indexOf('})');
                    var jsonString = jsonpData.substring(startPos+1, endPos+1);
                    json = JSON.parse(jsonString);
                }
                callback(null, json);
            } else {
                callback(error);
            }
        })
    }

    var getScoring = function() {
        var url = 'http://live.nhle.com/GameData/RegularSeasonScoreboardv3.jsonp';
        var dataReturn;
        getJsonFromJsonP(url, function (err, data) {
            console.log(data);
            return data;
        });
    }

    io.sockets.on('connection', function(socket) {
        socket.emit('init', { data: getScoring() });
    });
getJsonFromJsonP
解决方案来自另一篇文章,它正在生成ok结果

console.log(data)
在后端显示正确的数据,但是客户端(AngularJS)没有得到它。如果我将
returndata
更改为
return'hello world'
则“hello world”在客户端中显示为
{data:'hello world'}

函数使用
getJsonFromJsonP()
,它是异步的(因为它必须等待请求)

因此,您可能还希望传递
getScoring()
回调函数,然后在该回调中发出事件。例如:

var getScoring = function(callback) {
    var url = 'http://live.nhle.com/GameData/RegularSeasonScoreboardv3.jsonp';
    var dataReturn;
    getJsonFromJsonP(url, function (err, data) {
        //pass data to callback function
        callback(data);
    });
}

io.sockets.on('connection', function(socket) {
    getScoring( function(data){
        socket.emit('init', { data: data });
    });
});
否则,您将无法返回任何内容,因为当您拥有数据时,您已经超出了范围。您可以将其记录到控制台,但不能返回

函数使用
getJsonFromJsonP()
,它是异步的(因为它必须等待请求)

因此,您可能还希望传递
getScoring()
回调函数,然后在该回调中发出事件。例如:

var getScoring = function(callback) {
    var url = 'http://live.nhle.com/GameData/RegularSeasonScoreboardv3.jsonp';
    var dataReturn;
    getJsonFromJsonP(url, function (err, data) {
        //pass data to callback function
        callback(data);
    });
}

io.sockets.on('connection', function(socket) {
    getScoring( function(data){
        socket.emit('init', { data: data });
    });
});

否则,您将无法返回任何内容,因为当您拥有数据时,您已经超出了范围。您可以将其记录到控制台,但不能返回

返回JSON.stringify(数据)的是什么
do?返回JSON.stringify(数据)的是什么do?这个解决方案有效,谢谢。我想因为
console.log
正在生成数据,所以我不需要再使用另一个回调。这个解决方案很有效,谢谢。我想因为
console.log
正在生成数据,所以我不需要使用另一个回调。