2017-02-24 99 views
0

我試圖從服務器端發出一條消息將Sails應用程序發送到前端Angular2。我希望客戶端和服務器端都在同一個應用程序,所以經過一番搜索,我發現這個repo。我不得不在另一個堆棧溢出post的幫助下在打字稿中導入socket.io,並在我的包json中添加了@types/socket.io-clientsocket.io-client。我將包括我所有的文件。
這是我最初的搶答/ layout.ejs文件使用socket.io從Sails.js服務器發送數據到Angular2客戶端

<!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)); 
    } 
} 

我的後端是一個簡單的CONTROLER

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組件?

+0

是的,它是可能的,帆是捆綁在一起的套接字客戶端的人:HTTP:// sailsjs.com/documentation/reference/web-sockets,它運作良好,並有很好的記錄,所以我想知道爲什麼你使用第三方? –

+0

@CraigvanTonder,因爲我無法使用TypeScript將它導入Angular2應用程序中。我嘗試過,但它不斷給我錯誤。我檢查的第一件事是粘貼sails文檔。有人可以幫助我目前的設置嗎?我正在使用'systemjs.config.js'文件來包含依賴關係。 – Lexx

回答

0

你應該確保你加入一個房間,廣播方法只廣播到所有連接在房間裏

socket.join('roomName'); 
相關問題