尝试使用socket.io为浏览器提供变量

时间:2013-06-07 16:01:48

标签: node.js express socket.io

我有一个使用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

所以似乎没有发出这个变量。关于我做错了什么的指示?

1 个答案:

答案 0 :(得分:0)

两件事:

  1. sentiment函数是异步的,因此之前可以调用emit sentiment完成。请改回回调中的emit
  2. 在客户端sentimentRadius未定义。您必须使用data.sentimentRadius代替(data是服务器发送给客户端的对象)。 sentimentColor
  3. 也是如此

    [来自OP更新]

    您在发射后设置纬度/经度,它们将是未定义的。 我假设你将var tweetMarker = ...包装到socket.on函数中吗?