シナリオ:Angular7からのAPI呼び出し時に、Node(エクスプレス経由)を呼び出し、タイプのチャンクデータを返しますstring-この文字列データをキャプチャして文字列として表示したい
サーバー側:Nodeバックエンドから、送信されるデータは 'text'であり、jsonではありません...データは複数のres.write( 'some string')ステートメントを介して送信されます
Angularのクライアント側:オブザーバブルでこのデータを処理したい...
SyntaxError:JSON.parse()の位置12にあるJSONの予期しないトークン{
Src/app/myS.service.ts(24,54)のエラー:エラーTS2322:タイプ '"text"'はタイプ '"json"'に割り当てることができません
Node JSバックエンドから「テキスト」データをキャプチャするにはどうすればよいですか... Nodeでnpmcorsを使用しているので、CORSエラーはありません
デモコードはこちらから入手できます: https://stackblitz.com/edit/angular-44sess
私のバックエンドは以下のスニペットにあります:
app.get('/obs/responseWrite', cors(), function(req, res){
var j=0;
const headers = {
'Content-Type': 'text',
'Access-Control-Allow-Origin': '*',
'Access-Control-Allow-Methods': 'OPTIONS, POST, GET',
'Access-Control-Max-Age': 2592000, // 30 days
};
res.writeHead(200,headers);
for(var i=0; i<50000; i++){
/* setInterval(function() { res.write("returning j:["+ j + "]. "); j=j+1; if(j>=100){res.end();} }, 1000); */
var myObj = { return : i };
var myStr= JSON.stringify(myObj);
console.log(myStr);
res.write(myStr);
}
setInterval(function() { res.end(); }, 15000);
});
この場合、私は常に次のパターンを使用します。
returnObservable(): Observable<any> {
const requestOptions: Object = {
/* other options here */
responseType: 'text'
}
return this.http.get<any>(this.streamURL , requestOptions);
}
それがあなたの質問に答えることを願っています!
Returnジェネリック型は使用できません。ドキュメントでは、ジェネリック型は「json」専用です。これは、次のように使用する必要があることを意味します。
return this.http.get(this.streamURL, { responseType: "text"});
ドキュメントを参照してください https://angular.io/api/common/http/HttpClient#get オーバーロード#11に関心があり、現在オーバーロード#13を使用しています
最後に、これは更新されたコードへのリンクです: https://stackblitz.com/edit/angular-gv1tkl?file=src/app/myS.service.ts
編集1
Stackblitzに間違ったリンクを貼り付けました。上記を修正してください。