从socket.io中的客户端连接发送JSON数据(查询)到服务器

从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,而不是<%=