如何从远程服务器检索 pdf 并将其 return 作为 koa 响应?
How to retrieve pdf from remote server and return it as a koa response?
我有一个使用 koa 的节点应用程序,并尝试检索远程 pdf,return 它作为我的 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,但里面应该有内容。有谁知道解决方案是什么?
这有点棘手。我发现必须使用 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);
我有一个使用 koa 的节点应用程序,并尝试检索远程 pdf,return 它作为我的 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,但里面应该有内容。有谁知道解决方案是什么?
这有点棘手。我发现必须使用 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);