Node.js NodeJS+;Socket.IO可以';不要让json返回
我正在使用Socket.IO、AngularJS、Request和Express,并试图从请求中提取一些数据,然后将其发送给客户端。以下是我的职能: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) {
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
正在生成数据,所以我不需要使用另一个回调。