2017-07-17 25 views
0

ソケット接続が確立されると、active.ejs(クライアント)からindex.js(サーバー)にJSONオブジェクトを送信しようとしています。socket.ioのクライアント接続からサーバーへのJSONデータ(クエリ)の送信

しかし、サーバーに送信されたソケットオブジェクトのクエリパラメータはJSONオブジェクトではありません(空のオブジェクトです)。サーバーにソケットオブジェクトを記録しようとすると渡されました。

これはuser_infoオブジェクトが上記HTML(EJS)にcontroller.jsから渡される方法である

<!DOCTYPE html> 
<html> 
    <head> 
    <meta charset="utf-8"> 
    <title>Active</title> 
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script> 
    <script src="http://localhost:4000/socket.io/socket.io.js"></script> 
    </head> 
    <body> 
    <script>var socket = io.connect('http://localhost:4000/tune-in', {query: "<%= user_info %>"}); %></script> 
    <p> 
     Welcome, 
     <%= user_info.uri %> 
    </p> 
    </body> 
</html> 

をactive.ejs

active.ejs
app.get('/tune-in', function(req, res){ 
    res.render('active', {user_info: user_data}); 
    }); 

ファイルuser_infoオブジェクトの外観は次のとおりです。

{ country: 'US', 
    display_name: 'My name', 
    email: '[email protected]', 
    external_urls: { spotify: 'https://open.spotify.com/user/randomnums' }, 
    followers: { href: null, total: 3 }, 
    href: 'https://api.spotify.com/v1/users/randomnums', 
    id: 'randomstring', 
    images: 
    [ { height: null, 
     url: 'myimg', 
     width: null } ], 
    product: 'premium', 
    type: 'user', 
    uri: 'spotify:user:randomstring' } 

index.js - 私の意図した使用法がある

query: 
     { '[object Object]': 'undefined', 
     EIO: '3', 
     transport: 'polling', 
     t: 'LrEFaoW' } }, 

- 上記のJSONデータが

var io = socket(server); 

io.on('connection', function(socket){ 
    console.log('Made socket connection', socket); 
}); 

私はソケットオブジェクトをログインすると、クエリパラメータがどのように見えるがログに記録されなければなりませんsocket.broadcast.emit('users', data);のようなものをindex.jsに入れることができます。ここで、dataは、user_infoのフィールドのいくつかを含むJSONオブジェクトです。 )。 didn {query: "<%-JSON.stringify(user_info)%>"}と上記の可能性の重複は私の問題を解決していない、すなわち交換{query: "<%= user_info %>"}」:

<script> 
    var socket = io.connect('http://localhost:4000/tune-in', {query: "<%= user_info %>"}); %> 
    var active = document.getElementById('active'); 
    socket.on('users', function(data){ 
    active.innerHTML += "<li><em>" + data.display_name + " is connected" + "</em></li>"; 
    }); 
</script> 

EDIT -

そして

は、私のような何かをしたいのですが、 active.ejs問題を解決する。代わりに私はクライアント側でUnexpectedIdentifierと言っているエラーを得ました。

EDIT2エラーは{query: "<%-JSON.stringify(user_info)%>"}で、二重引用符は "<%-JSON.stringify(user_info)"です。

答えて

1

以下にごEJSテンプレートを変更してみてください:

<script> 
    var socket = io.connect('http://localhost:4000/tune-in', { 
    query: <%- JSON.stringify(user_info) %> 
    }); 
</script> 

注​​3210代わりの<%=

関連する問題