我尝试了各种各样的方法来实现这一目标。我正在尝试从节点上的API请求PDF,然后将其发送回调用它的客户端。
我只想在节点服务器上成功保存和查看PDF。
问题是我打开它时PDF文件总是空的(即使它的大小为30kb)。
基本流程是这样的(删除了一些位,但下面的代码可以正常工作并将PDF返回给我)
logical
我尝试使用/不使用二进制标志进行保存,如文件中的其他帖子所示,以及请求本身。还尝试了各种类型的解码方法,我总是得到一个空的PDF保存。
我的返回数据看起来像这样(更大,当保存为test.pdf时我得到一个30kb文件,如前所述)
%PDF-1.4 % 1 0 obj 0 obj <
我发现了一篇文章,说明了如何管理数据,我感觉我的pdf_data在转换为字符串时已损坏
任何想法如何使用当前设置进行此操作?
e / RequestPromise是一个库,如果更容易也可以使用标准请求库
https://github.com/request/request-promise - https://github.com/request/request
谢谢!
答案 0 :(得分:2)
您的代码无效,因为基础request
库(由request-promise
使用)要求encoding
选项设置为null
二进制数据 - 请参阅{{3 }}
以下是使用该模块下载二进制数据的方法 -
app.post("/getPayslipURL", function(client_request, res) {
const NI_NUMBER_REQUEST = db_api.createRequestTemplate({
body: JSON.stringify(client_request.body),
encoding: null
});
requestPromise(NI_NUMBER_REQUEST)
.then((db_response) => {
const PAY_API_OPTIONS = /*Code to generate options based on furhter DB info (Includes dates etc)*/
return requestPromise(PAY_API_OPTIONS); // Call pay API
})
.then((pay_pdf_data) => {
fs.writeFile("./test.pdf", pay_pdf_data, 'binary', (err) => {
if(err) {
return console.log(err);
}
console.log("The file was saved!");
});
})
.catch(err => `Error caught: ${console.log}`) // Catch any errors on our request chain
});
}