下载角度为2

时间:2017-10-06 09:52:48

标签: javascript node.js angular pdf

我正在尝试使用节点js在服务器端生成PDF并在客户端以角度4下载(当您按PDF下载时,Google Drive会这样做。)

Node JS代码如下所示:

var pdf = require('html-pdf');

app.get('/pdf/contacts', function(req, res) {
    Contact.find(function(error, response) {
        res.render('pdfs/views/contacts', {name: 'Daniel Pacuraru', contacts: response}, function(error, thtml) {

            var opts = {
                "format": "A4",
                "orientation": "portrait",
                "border": "0.4in"
            };

            pdf.create(thtml, opts).toStream(function(err, stream){
                res.attachment('pdfname.pdf');
                stream.pipe(res);
            });

        });
    });
});

在棱角分明的4面,我得到了类似的东西:

import * as FileSaver from 'file-saver';

downloadContacts(): Promise<any> {
    return this.http
        .get('http://localhost:3000/pdf/contacts')
        .toPromise()
        .then(response => {

            FileSaver.saveAs(response, "testdata.pdf");

        });
}

我收到此错误:Failed to execute 'createObjectURL' on 'URL'如果我将该行更改为此

FileSaver.saveAs(response.blob(), "testdata.pdf");

然后我收到此错误:Error: The request body isn't either a blob or an array buffer

我无法弄清楚我做错了什么,顺便说一句,有没有办法轻松下载这个流,没有像文件保护程序那样的插件?因为如果我只是在浏览器上输入和api链接,它会自动下载我的pdf文件。

先谢谢你,丹尼尔。

1 个答案:

答案 0 :(得分:0)

我假设角度部分正在客户端浏览器上运行。 为什么不使用fetch API来请求文件到节点?

const response = await fetch("http://localhost:3000/pdf/contacts");
const blob = await response.blob();

要使用此功能,您需要使用async await syntax,因为从站点请求数据(即使它来自本地服务器)是异步任务,您的代码将是继续运行,而不是等待请求完成。