无法连接到ejs文件上的套接字,引用和未定义的错误

时间:2017-07-17 00:01:29

标签: javascript node.js express socket.io ejs

当我使用express在客户端建立套接字连接时,我需要将数据发送到我的socket.io应用。但是,当我尝试执行此操作时,我在下面的 active.ejs 文件中收到引用错误。但是,我已成功连接到套接字,因为socket-id在index.js中记录到我的控制台(这也是我需要发送user_info数据的地方)

这是客户端html(ejs)页面 - 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>
    <p>
      Welcome,
      <%= user_info.uri %>
    </p>
    // REFERENCE ERROR HERE
    // changing {query: user_info} to just user_info doesn't help either
    <% var socket = io.connect('http://localhost:4000/tune-in', {query: user_info}); %> 
  </body>
</html>

这是user_info对象从 controller.js 传递到上述html(ejs)文件的方式 active.ejs

  app.get('/tune-in', function(req, res){
    res.render('active', {user_info: user_data});
  });

我需要将 active.ejs 中的user_info发送到 index.js 这是相关的 index.js

var server = app.listen(process.env.PORT || 4000);
console.log("Listening to port 4000...");
var io = socket(server);
io.on('connection', function(socket){
  // The below log executes and displays a socket id.
  console.log('Made socket connection', socket.id);
});

1 个答案:

答案 0 :(得分:2)

您无法以当前的方式访问user_info。只需更改此行

即可
<% var socket = io.connect('http://localhost:4000/tune-in', {query: user_info}); %> 

<% var socket = io.connect('http://localhost:4000/tune-in', {query: "<%= user_info %>"}); %>