當套接字連接建立時,我試圖從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)
左右。