如何从远程服务器检索pdf并将其作为koa响应返回?

时间:2018-04-06 09:39:42

标签: node.js koa

我有一个使用koa的节点应用程序,并尝试检索远程pdf,并将其作为我的koa请求的响应返回。这是代码:

router.get('/pdf', function *() {
    const url = 'http://example.com/pdf'
    const res = yield request(url)
    this.status = res.statusCode
    Object.keys(res.headers).forEach(key => {
      this.set(key, res.headers[key])
    })
    this.body = res.body
})

我得到带有空白页的pdf,但它应该包含内容。有没有人知道什么是解决方案?

1 个答案:

答案 0 :(得分:0)

要弄清楚这有点棘手。我发现必须使用stream包的PassThrough函数。下面的代码将外部PDF流式传输到/pdf路由,并且可以在浏览器中打开。

const Koa = require('koa');
const Router = require('koa-router');

const app = new Koa();
const router = new Router();

// Source: http://koajs.com/#stream
const PassThrough = require('stream').PassThrough;
const request = require('request');

router.get('/pdf', (ctx) => {
  const url = 'https://collegereadiness.collegeboard.org/pdf/sat-practice-test-8.pdf';
  ctx.set('Content-Type', 'application/pdf');
  ctx.body = request(url).pipe(PassThrough());
});

app
  .use(router.routes());

app.listen(3000);