【发布时间】:2019-01-18 06:25:50
【问题描述】:
更新为 res.send(data) 而不是 res.json(data)
使用 Angular 6 和 NodeJS 我正在做一个 Web 应用程序。 我正在尝试从 http post 请求下载文件。
我像这样向服务器发送请求。从我的组件中,我调用服务中的函数。在组件中,我订阅了服务器的答案,当我拥有它时,我创建了一个带有响应的新 Blob,并使用 FileSaver 下载 pdf。
现在,当我从服务器收到答案时,客户端将其视为错误,而状态为 200。错误消息是: “http://localhost:3000/api/experiment/regression 解析期间 Http 失败” 请参阅下面的屏幕截图。
Component.ts
this.api.postML(this.regression).subscribe(
res => {
console.log(res);
let pdf = new Blob(res.data, { type: "application/pdf" });
let filename = "test.pdf";
FileSaver.saveAs(pdf, filename);
},
err => {
alert("Error to perform the regression");
console.log(err);
}
);
API.Service.ts
public postML(data): Observable<any> {
// Create url
let url = `${baseUrl}${"experiment/regression"}`;
let options = {
headers: { "Content-Type": "application/json", Accept: "application/pdf" }
};
// Call the http POST
return this.http
.post(url, data, options)
.pipe(catchError(this.handleError));
}
然后从服务器,它使用发送的数据执行一些代码并生成一个 PDF 文件。 然后,我想将 pdf 作为响应发送给客户。 我试过这样:
fs.readFile("/home/user/test.pdf", function(err, data) {
let pdfName = "Report.pdf";
res.contentType("application/pdf");
res.set("Content-Disposition", pdfName);
res.set("Content-Transfer-Encoding", "binary");
console.log(data);
console.log("Send data");
res.status(200);
res.send(data);
});
【问题讨论】:
-
这条线看起来不太好
res.json(data);为什么是 JSON?应该是字节流吧? -
你是正确的@rodrigoap。 json 将以 json 格式下载对象,而不是 PDF。
-
试试
res.send(data) -
我尝试了 res.send(data),即使状态为 200 我也有错误。消息错误是:“localhost:3000/api/experiment/regression 解析期间的 Http 失败”
标签: javascript node.js angular typescript mean-stack