node.js - Angular7:无法设置 {responseType: 'text'}
问题描述
场景:在来自 Angular7 的 API 调用中,我正在调用 Node(通过 express)并返回字符串类型的分块数据 - 我想捕获此字符串数据并将其显示为字符串
服务器端: 从 Node 后端发送的数据是“文本”而不是 json...数据是通过多个 res.write('some strings') 语句发送的
Angular中的客户端: 我想要一个可观察的来处理这些数据......
- 当我没有提到任何 responseType [return this.http.get(this.streamURL);]... 我得到错误:
SyntaxError: Unexpected token { in JSON at position 12 at JSON.parse ()
- 当我没有提到 responseType 作为 'text [return this.http.get(this.streamURL , { responseType: 'text'});]... 我在编译时遇到错误:
src/app/myS.service.ts(24,54) 中的错误:错误 TS2322:类型 '"text"' 不可分配给类型 '"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);
});
解决方案
在这种情况下,我总是使用以下模式:
returnObservable(): Observable<any> {
const requestOptions: Object = {
/* other options here */
responseType: 'text'
}
return this.http.get<any>(this.streamURL , requestOptions);
}
希望它能回答你的问题!
推荐阅读
- jquery - 仅适用于有效日期和 MM/DD/YYYY 格式的 JQuery 日期验证
- javascript - 在没有递归/承诺的情况下无限期重复异步功能
- javascript - 如何在我的视图和所有屏幕中居中我的 react-native svg
- python - 为什么我的 PySpark 数据框连接操作写入空结果?
- python - 错误的层尺寸 Keras
- python - NameError:没有为 Selenium 定义名称“驱动程序”
- r - R - 如何将表达式传递给集群(在并行包中)
- css - 如何阻止 div 在 Safari 中重叠
- typescript - 具有构造函数的对象的条件类型
- flutter - viewportFraction < 1.0 的 PageView 非居中对齐