NodeJS + Socket.IO不能让json返回
我使用的是Socket.IO,AngularJS,Request和Express,我试图从请求中提取一些数据,然后把它发送给客户端。 这是我的function:
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
解决scheme来自另一篇文章,它产生了良好的结果。
console.log(data)
在后端显示正确的数据,但客户端(AngularJS)没有得到它。 如果我更改return data
以return 'hello world'
则“hello world”会以{ data : 'hello world' }
的forms出现在客户端中。
getScoring()
函数使用getJsonFromJsonP()
,它是asynchronous的(因为它必须等待请求)。
所以你可能也想传递一个callback函数getScoring()
,然后在该callback中发出事件。 像这样的例子:
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 }); }); });
否则你将无法返回任何东西,因为当你有数据时你已经超出了范围。 您可以将其logging到控制台,但不能返回。
- 在node-sass@0.9.6安装脚本“node build.js”失败
- 在Grunt服务器中安装经过身份validation的公司代理
- HTML和JSON响应的相同URL
- URL在浏览器刷新时发生变化($ routeProvider用于客户端路由)
- yeomanangular发电机不会开始咕噜发球
- 有angular度的js方式上传图像到谷歌云存储使用签名的url
- Multivision的应用 – 寻找熟悉Joe Eames Course的MeanStack的人
- Angular-Fullstack发电机生产应用程序不能正确服务于socket.io?
- Node.js可写入stream创build错误的文件(更大和不可读)