我有一个用例,我想从数据库中读取数据,并将其作为可下载的压缩文件发送到前端.我被困在如何使用Node.js 和express来实现这一点上. 目前,我只是try 发送一个可下载的json文件,但对如何实现感到困惑.

我到目前为止所try 的-->

const data = db.read() // fetch an array of objects.
const myBuffer = Buffer.from(JSON.stringify(data));  //creating a buffer
const readableStream = Readable.from(myBuffer);
res.setHeader('Content-Type', 'application/octet-stream');
res.setHeader('Content-Disposition', 'attachment; filename=\"my json file.json\"');
readableStream.pipe(res);

从postman 那里试一试,我直接得到了json.我的问题是如何在这里创建一个data的可下载压缩文件并将其发送给客户端.我想确保我不会使用文件系统在服务器上写入文件,然后再发送它.任何帮助和指导都是很棒的,谢谢!

推荐答案

正如@ardritkrasniqi建议使用第三方NPM包一样,我能够在内存中创建一个压缩文件,并使用NPM包archiver将其发送给客户端.

我是这样创造的-->;

const data = db.read() // fetch an array of objects.
const myBuffer = Buffer.from(JSON.stringify(data));  //creating a buffer
const archive = archiver.create('zip', {});
archive.append(myBuffer, { name: 'test.json'});
res.setHeader('Content-Type', 'application/zip');
res.setHeader('Content-Disposition', 'attachment; filename=\"test.zip\"');
archive.pipe(res);
archive.finalize();

希望这将对其他正在努力实现同样目标的人有所帮助.

PS.我使用Express作为我的后端 node 框架.

Node.js相关问答推荐

如何在RavenDB中执行JS索引?

如何在Mongoose中调用动态Collection ?

无法使用NPM安装REDUX和DATEPPICER

类扩展值[object object]不是构造函数或null

编写动态创建的 YAML - 为生态系统创建 Docker compose 文件(使用 js-yaml)

无法将示例 Node.js 应用程序部署到 AWS Elastic Beanstalk

当我try 从本地主机发布新产品时收到错误消息

Express.js - 监听请求中止

在将用作 nodejs/expressjs 中的中间件的函数中使用 keycloak.protect()

node.js 中 res.setHeader 和 res.header 的区别

在 Passport 策略回调中获取请求对象

使用 WebSockets 有服务器成本吗?

如何在 NodeJS 中获取操作系统用户名?

Nodejs 随机免费 tcp 端口

在 express 中添加故意延迟

如何将子集合添加到 Firestore 中的文档?

密码的 Node.js 散列

如何在 Joi 字符串验证中使用枚举值

为什么我们要为 Angular 2.0 安装 Node.js?

node.js 中的意外保留字导入