首页 文章

404使用Angular2,angular2-websocket和typings

提问于
浏览
1
...
import {$WebSocket} from "angular2-websocket/angular2-websocket";

@Injectable()
export class DeviceService {

    private logger:Logger;
    private ws:$WebSocket;

    constructor(
        private _logger: Logger
    ) {
        this.logger=_logger;
        this.ws = new $WebSocket("ws://nodered-iot.net/ws/devices");
    }

    private _devices:Device[] = [];

    getDevices() {

        this.ws.send("Hello");
   ...

在我的浏览器上我得到了这个:

GET http://localhost:1880/node_modules/angular2-websocket/angular2-websocket 404(未找到)I @ system.src.js:4597(匿名函数)http://localhost:1880/node_modules/angular2-websocket/angular2-websocket(...)

我在index.html上使用这个定义

<!-- 2. Configure SystemJS -->
<script>
    System.config({
        transpiler: 'typescript',
        typescriptOptions: { emitDecoratorMetadata: true },
        packages: {'app': {defaultExtension: 'ts'}},
        map: {
            'angular2-websocket': 'node_modules/angular2-websocket'
        }
    });
    System.import('app/main')
            .then(null, console.error.bind(console));
</script>

编辑*

我成功找到了FIX:
System.config({transpiler:'typescript',typescriptOptions:{emitDecoratorMetadata:true},packages:{_ 'app':{defaultExtension:'ts'},_ 'js':{defaultExtension:'ts'}},map:{_ 'angular2-websocket':'js'}}); System.import('app/main').then(null,console.error.bind(console));
我不得不将node_module中的文件复制到新的js文件夹中 . 这不是很好,但如果这些文件不在nodeJs的'public'文件夹中,我不知道如何在客户端提供这个:/ /

2 回答

  • 1

    我认为这是一个SystemJS配置 . 你试试这个:

    <script>
      System.config({
        map: {
          'angular2-websocket': 'node_modules/angular2-websocket'
        },
        packages: {
          (...)
        }
      });
    </script>
    
  • 0

    Anoher解决方案是更改NodeRed的Root,而不是指向'public'文件夹:

    // Serve up the welcome page
    httpStatic: path.join(__dirname,"/"),
    

    然后我们可以在index.html上声明:

    <script src="/node_modules/angular2-websocket/angular2-websocket.js"></script>
    

相关问题