簡體   English   中英

無法從Angular2應用程序連接到我的WebSocket

[英]Can't connect to my WebSocket from within my Angular2 app

我有一個使用Node.js / Electron / Angular2(TypeScript)的應用程序。 使用socket.io我創建了一個WebSocket。 只要我不在Angular2應用程序中,一切都可以正常工作。

我整天試圖讓它運行起來,但是沒有運氣。 我下載了有效的教程,但找不到缺少的鏈接。 讓我發狂!

  • 這是我的electron.js啟動應用程序,創建websocket服務器端
  • 這是我的index.html,具有可運行的websocket,但作為本機JavaScript代碼
  • 這是我試圖使Websocket運行的Angular2的根組件

錯誤-不會停止編譯-我得到的是root.component.ts(14,17): error TS2304: Cannot find name 'io'.

如何擺脫該錯誤? 或者更好:在Angular2內部進行這種網絡套接字通信的最佳實踐是什么?

提前致謝。

現在,我以這種方式解決了這個問題:

  1. 安裝的socket.io-client $ tsd install socket.io-client
  2. 在我的main.ts文件中添加了類型輸入引用///<reference path="../../typings/socket.io-client/socket.io-client.d.ts"/>
  3. 安裝的socket.io-client Node.js模塊$ npm install --save socket.io-client
  4. 將此模塊添加到了我的index.html <script src="../node_modules/socket.io-client/socket.io.js"></script>

現在,我可以簡單地使用任何Angular2組件中的套接字,而無需添加任何額外的行。

socket = null;

constructor() {
    this.socket = io('http://localhost:8181');
    this.socket.on('news', function (data) {
        console.log(data);
    });
}

作為參考,這是我的主要Electron .js文件中的服務器套接字代碼:

var server = require('http').createServer(function(req, res) {})
    socket = require('socket.io')(server, {});

server.listen(8181);

socket.on('connection', function(socket) {
    socket.emit('news', {hello: 'world'});
    socket.on('my other event', function(data) {
        console.log(data);
    });
});

希望以后能對任何人有幫助。 感謝Thierry Templier和dvlsg的幫助。

我要指出的是,如果您使用的是電子,則不應真正將electron.js視為服務器端。 它更多地是客戶端啟動器/引導程序,並且必須在每個客戶端上運行。 您必須有一個單獨的節點應用程序(在socket.io的情況下,我強烈建議這樣做)才能真正使您的代碼服務器端。

對於您的問題,您可以嘗試在根組件中添加import io from 'socket.io-client'var io = require('socket.io-client') import io from 'socket.io-client' (在npm install socket.io-client ,如有必要) )。

您需要使用以下命令安裝socket.io類型(請參見以下鏈接: https : //github.com/DefinitelyTyped/DefinitelyTyped/blob/master/socket.io/socket.io.d.ts ):

$ tsd install socket.io

然后,您需要導入它:

import * as io from 'socket.io';

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM