Angular7:无法设置{responseType:'text'}

Akb*_*bal 2 chunked node.js angular angular7

场景:从Angular7调用API时,我正在调用Node(通过express)并返回字符串类型的分块数据-我想捕获此字符串数据并将其显示为字符串

服务器端: 从Node后端发送的数据是“文本”而不​​是json ...数据是通过多个res.write('somestring')语句发送的

客户端在Angular中: 我想要一个可观察的对象来处理此数据...

  1. 当我不提及任何responseType [返回this.http.get(this.streamURL);] ...时,我得到了错误:

SyntaxError:意外令牌{在JSON.parse()位置12的JSON中

stackBlitz上的错误以及ng服务上编译时的类似错误

  1. 当我不提及responseType为'text [返回this.http.get(this.streamURL,{responseType:'text'});] ...编译时出现错误:

src / app / myS.service.ts(24,54)中的错误:错误TS2322:无法将类型“文本”分配给类型“ json”

我如何从Node JS后端捕获“文本”数据...我在Node中使用npm cors,所以那里没有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);
  
});
Run Code Online (Sandbox Code Playgroud)

Łuk*_*ski 10

您不能使用返回泛型类型。在文档中,泛型类型仅适用于“json”。这意味着您需要像这样使用 get:

return this.http.get(this.streamURL, { responseType: "text"});
Run Code Online (Sandbox Code Playgroud)

请参阅文档https://angular.io/api/common/http/HttpClient#get 您感兴趣的是 Overload #11,现在您正在使用 Overload #13

最后,这是您的代码更新链接:https : //stackblitz.com/edit/angular-gv1tkl?file=src/app/myS.service.ts

编辑 1

我粘贴了错误的 stackblitz 链接。以上正确。


小智 9

在这种情况下,我总是使用以下模式:

returnObservable(): Observable<any> {
  const requestOptions: Object = {
    /* other options here */
    responseType: 'text'
  }
  return this.http.get<any>(this.streamURL , requestOptions);
}
Run Code Online (Sandbox Code Playgroud)

希望它能回答您的问题!