2017-07-17 78 views
0

當套接字連接建立時,我試圖從active.ejs(客戶端)向index.js(服務器)發送JSON對象。從socket.io中的客戶端連接發送JSON數據(查詢)到服務器

然而,發送到服務器Socket對象的查詢參數不是JSON對象(它是一個空的對象),我通過了,當我嘗試登錄Socket對象在服務器中。

active.ejs

<!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> 

這是怎麼user_info對象從controller.js上述HTML傳遞(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 - 如果當我登錄Socket對象上面JSON數據應該記錄

var io = socket(server); 

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

,查詢參數看起來像 -

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

我的預期用途是能夠這樣做socket.broadcast.emit('users', data);index.js其中data是包含幾個user_info領域的(或JSON對象的查詢Ø bject)。

而且在active.ejs,我想這樣做 -

<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> 

編輯:上面提到的可能重複沒有解決我的問題,即替換{query: "<%= user_info %>"}{query: "<%-JSON.stringify(user_info)%>"}沒」解決問題。相反,我得到了錯誤,說在客戶端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,而不是<%=

相關問題