使用socket.io将数据从Sails.js服务器发送到Angular2客户端

时间:2017-02-24 18:18:02

标签: angular socket.io sails.js

我正在尝试从我的服务器端Sails应用程序向前端Angular2发出消息。我希望客户端和服务器端都在同一个应用程序中,所以经过一些搜索我找到了repo。我必须在另一个堆栈溢出post的帮助下在typescript中导入socket.io,并在我的包json中添加@types/socket.io-clientsocket.io-client。我将包括我的所有文件 这是我最初的vies / layout.ejs文件

<!DOCTYPE html>
<html>
  <head>
    <title><%=typeof title == 'undefined' ? 'New Sails App' : title%></title>

    <!-- Viewport mobile tag for sensible mobile support -->
    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">

    <!--STYLES-->
    <link rel="stylesheet" href="/styles/importer.css">
    <!--STYLES END-->

    <script src="node_modules/core-js/client/shim.min.js"></script>
    <script src="node_modules/zone.js/dist/zone.js"></script>
    <script src="node_modules/reflect-metadata/Reflect.js"></script>
    <script src="node_modules/systemjs/dist/system.src.js"></script>
  </head>

  <body>
    <%- body %>

    <!--SCRIPTS-->
    <script src="/js/dependencies/sails.io.js"></script>
    <script src="/js/systemjs.config.js"></script>
    <!--SCRIPTS END-->

    <script>
      System.import('app').catch(function(err){ console.error(err); });
    </script>

  </body>
</html>

在我的system.js.config.js文件中我已将"socket.io-client": 'node_modules/socket.io-client/dist/socket.io.js'添加到我的地图中,并将'socket.io-client': {defaultExtension: 'js'}添加到包中。
在我的组件中,我将其包含在import * as io from "socket.io-client";中,之后我

export class AppComponent implements OnInit {
    constructor(){}

    ngOnInit() {
        let socket = io();

        socket.on('message', function (data){
            console.log(data.greeting);
        }.bind(this));
    }
}

我的后端是一个简单的控制器

emit: function (req, res) {
    console.log('sending message');
    sails.sockets.broadcast('message', { greeting: 'Hola!' });
    return res.json(200, {success: true});
}

当我调用emit操作时,我得到sending message,但没有任何内容记录在前端。任何地方都没有错误,但没有任何反应。如果我记录套接字变量,我得到这个socket log

是否可以从我的后端Sails应用程序向我的前端Angular2组件发送数据?

1 个答案:

答案 0 :(得分:0)

你应该确保你加入了一个房间,广播方法只向所有在房间里连接的人广播

socket.join('roomName');