1

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

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

4

1 回答 1

0

两件事情:

  1. sentiment函数是异步的,因此emit可以在 sentiment完成之前调用。emit改为调用回调。
  2. 在客户端sentimentRadius没有定义。您必须data.sentimentRadius改用(data是服务器发送给客户端的对象)。同样的事情sentimentColor

[来自OP更新]

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

于 2013-06-07T16:12:10.923 回答