gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 03:21:50 27 4
gpt4 key购买 nike

我正在尝试从 active.ejs 发送 JSON 对象(客户)至index.js (服务器)当建立套接字连接时。

但是,发送到服务器的套接字对象的查询参数不是我在服务器中尝试记录套接字对象时传递的 JSON 对象(它是一个空对象)。

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: 'myname@gmail.com',
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 - 应记录上述 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是一个 JSON 对象,包含 user_info 的一些字段(或查询对象)。

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>

注意<%-而不是<%=

关于javascript - 从 socket.io 中的客户端连接发送 JSON 数据(查询)到服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45134992/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com