2017-10-20 5 views
0

が定義されていません。ウィンドウは、私は、ライブラリNG2-MQTTで働いていると私はそれがこのように私のコンポーネントをイム使用角度ユニバーサル第三ライブラリ

ReferenceError: window is not defined 
    at Object.<anonymous> (/Users/Picchu/Documents/em3/node_modules/ng2-mqtt/mqttws31.js:2143:4) 
    at Module._compile (module.js:556:32) 
    at Object.Module._extensions..js (module.js:565:10) 
    at Module.load (module.js:473:32) 
    at tryModuleLoad (module.js:432:12) 
    at Function.Module._load (module.js:424:3) 
    at Module.require (module.js:483:17) 
    at require (internal/module.js:20:19) 
    at Object.<anonymous> (/Users/Picchu/Documents/em3/dist/server.js:18707:18) 

import 'ng2-mqtt/mqttws31.js'; 
declare var Paho: any; 

今、私は次のエラーを取得しています

この問題を解決するにはどうすればよいですか? Node.jsのはwindowを持っていると、ダミーglobal.windowを持つことが、現在角度がグローバル変数を検出する方法に影響しないので

+0

角度/共通で利用可能なisPlatformBrowserを使用して、ブラウザでのみコードのこの部分を選択的に実行することができます –

答えて

3

サーバーエラーを回避する方法の1つは、windowを使用するコンポーネント(オプションの場合)をレンダリングすることではありません。以下のような何か:

<ng-container *ngIf="isBrowser"> 
    <!-- mqttws31-component --> 
    <mqttws31-component></mqttws31-component> 
</ng-container> 

isBrowserが(NG2

import { isBrowser } from 'angular2-universal'; 

からインポートすることができますかNG4 +場合、また、あなたのブラウザモジュールでこれを定義することができます。

// app.browser 
@NgModule({ 
    providers: [ 
    { provide: 'isBrowser', useValue: true } 
    ] 
}) 

次にコンストラクタから注入する

export class SomeComponent implements OnInit { 
    constructor(@Inject('isBrowser') private isBrowser: boolean) 
    ngOnInit() { 
    // example usage, this could be anywhere in this Component of course 
    if (this.isBrowser) { 
     alert('we're in the browser!'); 
    } 
} 
0

windowは、サーバー側のユニバーサルアプリケーションでは使用しないでください。

パッケージでwindowが使用されている場合は、そのリポジトリで問題を開くことができます。また、分岐してwindowを使用しないように変更することもできます。

windowに依存するパッケージは、クライアント側に固有のものに依存することが多いため、この問題がソートされてもサーバー側では正常に動作しません。

Package descriptionは言う:

Depends on the library from: https://eclipse.org/paho/clients/js/

library descriptionは言うものの:サーバー側で期待通りに動作するようになっていません

The Paho JavaScript Client is an MQTT browser-based client library written in Javascript that uses WebSockets to connect to an MQTT Broker.

通常、サードパーティ製の角のモジュールは、スタブや嘲笑されるべきです。偽の指令とサービスを含むダミーモジュールは、実際のモジュールの代わりにapp.server.tsにインポートされます。

+0

OK、わかりませんでした。この問題を解決する方法はありますか?私はnode.jsアプリケーション内にgloba変数ウィンドウを作成する必要があります。どのようにしてこれを行う必要がありますか? –

+0

最後の段落を参照してください。あなたのケースにも当てはまります。これは、モジュールがアプリでどのように使用されているか、つまりこのモジュールがサーバー側で生成されたページにどのように影響するかによってまったく異なります。また、問題を開くことを検討してください。ユニバーサルアプリケーションでエラーを起こさないモジュールを提供するのはベンダーの責任です。 – estus

+0

私はすでにレポに問題を開いています。私はクライアントとしてモジュールを使用していますが、サーバー側でエラーが発生しています。私はどのようにこれを解決することができないのか分かりません。あなたの助けを借りても –

関連する問題