首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Node ( express ) -通过api使用express发送pdf

Node ( express ) -通过api使用express发送pdf
EN

Stack Overflow用户
提问于 2017-06-20 22:58:41
回答 0查看 3.5K关注 0票数 1

我有一个api,为我在我的网站上的每一笔付款生成发票。在另一端,我有一个管理客户端的服务器。当客户要求时,我需要获取pdf。

我使用node/express和axios来管理http调用。

我设法用以下代码从api发送了pdf:

代码语言:javascript
复制
function retrieveOneInvoice(req, res, next) {
    Order
        .findOne({_id: req.params.id, user: req.user.id})
        .exec((err, order) => {
            if(err) {

            } else if (!order) {
                res.status(404).json({success: false, message: 'Order not found!'});
            } else {
                const filename = order.invoice.path;
                let filepath = path.join(__dirname, '../../../invoices' ,filename);

                fs.readFile(filepath, function (err, data){
                    res.contentType("application/pdf");
                    res.end(data, 'binary');
                });
            }
        });
}

这部分工作正常,我可以获取并保存一个pdf文件。此外,如果我打印数据,我会得到一个如下所示的缓冲区:<Buffer 25 50 44 46 2d 31 2e 34 0a 31 20 30 20 6f 62 6a 0a 3c 3c 0a 2f 54 69 74 6c 65 20 28 fe ff 29 0a 2f 43 72 65 61 74 6f 72 20 28 fe ff 29 0a 2f 50 72 6f ... >

在我的客户机上,我使用axios获取数据:

代码语言:javascript
复制
function retrieveInvoice(Config) {
    return function(orderId, done) {
        axios({
            url: `${Config.apiUrl}/invoices/${orderId}`,
            method: 'get'
        }).then(
            (res) => { return done(null, res.data) },
            (err) => { return done(err) }
        )
    }
}

最后,我尝试通过调用前面的函数将其发送到客户端:

代码语言:javascript
复制
Api.retrieveInvoice(orderId, (err, data) => {
        if(err) {

        } else {
            res.contentType("application/pdf");
            res.end(new Buffer(data, 'binary'), 'binary');
        }
    });

这就是我的问题所在。我总是收到空白页。我尝试过使用和不使用缓冲区,如下所示:

代码语言:javascript
复制
res.contentType("application/pdf");
res.end(data, 'binary');

并且没有'binary‘参数。如果我同时在api和客户机中记录数据,我会得到完全相同的缓冲区和二进制文件。当我以完全相同的方式将它们发送给客户端时,我只是不能理解哪里会是我的错误。

我希望我能给你足够的信息来帮助我,我会补充所有可以帮助潜在助手的东西。

谢谢你的帮助。

EN

回答

页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44656596

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档