从socket.io中的客户端连接发送JSON数据(查询)到服务器
问题描述:
当套接字连接建立时,我试图从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)
左右。
答
试着改变你的EJS模板以下几点:注意
<script>
var socket = io.connect('http://localhost:4000/tune-in', {
query: <%- JSON.stringify(user_info) %>
});
</script>
的3210,而不是<%=