场景: 从Angular7调用API时,我正在调用Node(通过express)并返回字符串类型的分块数据-我想捕获此字符串数据并将其显示为字符串
服务器端: 从Node后端发送的数据是'text'而不是json ...数据是通过多个res.write('somestring')语句发送的
Angular的客户端: 我希望观察者能够处理这些数据...
SyntaxError:JSON 12中的意外令牌{ 在JSON.parse()
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);
});
答案 0 :(得分:5)
在这种情况下,我总是使用以下模式:
returnObservable(): Observable<any> {
const requestOptions: Object = {
/* other options here */
responseType: 'text'
}
return this.http.get<any>(this.streamURL , requestOptions);
}
希望它能回答您的问题!
答案 1 :(得分:1)
您不能使用返回通用类型。在文档中,泛型类型仅适用于“ json”。这意味着您需要使用get像这样:
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链接。在上面更正。