[英]How do I stream response in express and angular?
我想在 Express 和 Angular 之间建立一个数据流,以便来自 Express 的部分响应可以立即到达并在 Angular 中处理(当我有一条数据时,我想将它发送到 Angular 并在那里处理它,而不是等待为完整的数据)。 不幸的是,响应并没有做出任何“部分”响应,而是将信息写入响应中,最后才将完整的信息发送到前端。 但是我需要持续的通信,其中部分信息会立即发送到前端。 我究竟做错了什么?
表达:
router.get("/getStreamedData", (request, response, next) => {
response.setHeader('Content-Type', 'text/html; charset=utf-8');
response.setHeader('Transfer-Encoding', 'chunked');
console.log("Partial response 1");
response.write("Partial answer 1");
setTimeout(function () {
console.log("Partial response 2");
response.write("Partial answer 2");
setTimeout(function () {
console.log("Partial response 3");
response.write("Partial answer 3");
setTimeout(function () {
console.log("response end");
response.end()
}, 5000)
}, 5000)
}, 5000)
});
角服务:
getProduktdataDatastore(language: string){
let params = new HttpParams().set('language', language);
return this.http.get<any>(this.apiPath + 'getStreamedData',{params}).pipe(map(data => {console.log("data: ", data)}));
}
角组件:
this.WebGridService.getProduktdataDatastore(this.selectedLanguage)
.subscribe(
response => {
console.log("responsedata: ", response)
},
error => {
this.flagLoadData = false;
this.messageBox = {messageBoxFlag: true, text: error.error} ;
}
)
使用低级fetch
API,您可以分块处理响应:
fetch(this.apiPath + "getStreamedData").then(function(response) {
response.body.getReader().read().then(function({done, value}) {
// value is one chunk of data
// done = true if there is no more data
});
});
另请参阅此示例。
我不知道 Angular http
方法是否也产生可读流。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.