Hej那里。
我有一个使用Node.js / Electron / Angular2(TypeScript)的应用程序。使用socket.io我创建了一个WebSocket。一切正常,只要我不在我的Angular2应用程序中。
我试着整天跑步,没有运气。我下载了一个工作教程,但无法找到丢失的链接。让我疯狂!
错误 - 我没有停止编译 - root.component.ts(14,17): error TS2304: Cannot find name 'io'.
。
如何摆脱这个错误?或者更好:Angular2中这个websocket通信的最佳实践是什么?
提前致谢。
答案 0 :(得分:1)
现在我用这种方式解决了这个问题:
$ tsd install socket.io-client
和///<reference path="../../typings/socket.io-client/socket.io-client.d.ts"/>
添加了一个打字参考。$ npm install --save socket.io-client
和<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的帮助。
答案 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';