我有一个使用node / express / socket.io在地图上标记推文的应用程序。我也试图包含一些情绪分析,所以我正在使用这样的npm情绪:
var sentiment = require('sentiment');
twit.stream('statuses/filter', { locations: locs }, function(stream) {
stream.on('data', function (data) {
var geo=false,latitude,longitude;
if(data.geo!=null){
// calculate sentiment
var tweetSentiment, sentimentRadius, sentimentColor;
sentiment(data.text, function (err, result) {
tweetSentiment = result;
if (result == 0) {
sentimentRadius = 300;
} else if (result >=0) {
sentimentRadius = result*100;
sentimentColor = '#FC0828';
} else {
sentimentRadius = (0-result)*100;
sentimentColor = '#00DE1E';
}
io.sockets.volatile.emit('tweets', {
user: data.user.screen_name,
text: data.text,
geo : geo,
latitude: latitude,
longitude: longitude,
sentimentRadius: sentimentRadius,
sentimentColor: sentimentColor
});
});
geo = true;
latitude = data.geo.coordinates[0];
longitude = data.geo.coordinates[1];
}
});
});
在socket.js中(从浏览器调用):
// Add a marker to the map
var tweetMarker = new google.maps.Circle({
center:new google.maps.LatLng(data.latitude, data.longitude),
radius:data.sentimentRadius,
strokeColor:data.sentimentColor,
strokeOpacity:0.7,
strokeWeight:1,
fillColor:data.sentimentColor,
fillOpacity:0.7
});
tweetMarker.setMap(map);
但我在浏览器控制台中收到错误:
Uncaught ReferenceError: sentimentRadius is not defined
所以似乎没有发出这个变量。关于我做错了什么的指示?
答案 0 :(得分:0)
两件事:
sentiment
函数是异步的,因此之前可以调用emit
sentiment
完成。请改回回调中的emit
。sentimentRadius
未定义。您必须使用data.sentimentRadius
代替(data
是服务器发送给客户端的对象)。 sentimentColor
。[来自OP更新]
您在发射后设置纬度/经度,它们将是未定义的。
我假设你将var tweetMarker = ...
包装到socket.on函数中吗?