无法从我的Angular2应用程序中连接到我的WebSocket

时间:2016-03-16 16:06:26

标签: javascript node.js websocket socket.io angular

Hej那里。

我有一个使用Node.js / Electron / Angular2(TypeScript)的应用程序。使用socket.io我创建了一个WebSocket。一切正常,只要我不在我的Angular2应用程序中。

我试着整天跑步,没有运气。我下载了一个工作教程,但无法找到丢失的链接。让我疯狂!

  • 这是我的electron.js启动应用程序,创建websocket服务器端
  • 这是我的index.html有工作的websocket,但是作为原生JavaScript代码
  • 这是我的root component Angular2试图让websocket运行

错误 - 我没有停止编译 - root.component.ts(14,17): error TS2304: Cannot find name 'io'.

如何摆脱这个错误?或者更好:Angular2中这个websocket通信的最佳实践是什么?

提前致谢。

3 个答案:

答案 0 :(得分:1)

现在我用这种方式解决了这个问题:

  1. 已安装socket.io-client typings $ 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>
  5. 现在我可以简单地使用任何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的帮助。

答案 1 :(得分:0)

我会注意到,如果你使用电子,你不应该真的认为electron.js是服务器端。它更像是一个客户端启动器/引导程序,必须在每个客户端上运行。您必须有一个单独的节点应用程序(我强烈建议,在socket.io的情况下),以真正使您的代码服务器端。

至于您的问题,您可以尝试在根组件中添加import io from 'socket.io-client'var io = require('socket.io-client')(如有必要,请npm install socket.io-client之后)。

答案 2 :(得分:0)

您需要使用以下命令安装socket.io typings(请参阅此链接:https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/socket.io/socket.io.d.ts):

$ tsd install socket.io

然后你需要导入它:

import * as io from 'socket.io';