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

2つのこと:

  1. sentiment関数は非同期であるため、終了emitする前に呼び出すことができます sentimentemit代わりにコールバックを呼び出します。
  2. クライアント側sentimentRadiusでは定義されていません。data.sentimentRadius代わりに (dataはサーバーがクライアントに送信するオブジェクトです)を使用する必要があります。についても同じですsentimentColor

【OPアップデートより】

放出後に緯度/経度を設定すると、それらは未定義になります。var tweetMarker = ...socket.on 関数にラップすると思いますよね?

于 2013-06-07T16:12:10.923 に答える