node.js中的JSON Zip响应

Ake*_*ltZ 7 zip json node.js express

我是node.js的新手,我正在尝试发送一个包含JSON结果的zip文件.我一直试图弄清楚如何做到这一点,但没有达到预期的效果.

我正在使用NodeJS,ExpressJS,LocomotiveJS,Mongoose和MongoDB.

由于我们正在构建一个面向移动的应用程序,我正试图尽可能多地保存带宽.

移动应用程序的每日初始加载可能是一个大的JSON文档,因此我想在将其发送到设备之前将其压缩.如果可能的话,我想在内存中完成所有操作以避免磁盘I/O.

到目前为止我尝试了3个库:

  • ADM-ZIP
  • 节点拉链
  • zipstream

我实现的最好结果是使用node-zip.这是我的代码:

  return Queue.find({'owners': this.param('id')}).select('name extra_info cycle qtype purge purge_time tasks').exec(function (err, docs) {
    if (!err) {
      zip.file('queue.json', docs);
      var data = zip.generate({base64:false,compression:'DEFLATE'});

      res.set('Content-Type', 'application/zip');
      return res.send(data);
    }
    else {
      console.log(err);
      return res.send(err);
    }
  });
Run Code Online (Sandbox Code Playgroud)

结果是下载的zip文件,但内容不可读.

我很确定我在混淆东西,但到目前为止我还不确定如何继续.

有什么建议吗?

谢谢你的推荐

cho*_*ovy 17

您可以使用以下方法压缩Express 3中的输出:

app.configure(function(){
  //....
  app.use(express.compress());
});


app.get('/foo', function(req, res, next){
  res.send(json_data);
});
Run Code Online (Sandbox Code Playgroud)

如果用户代理支持gzip,它将自动为您进行gzip.

  • 我相信所有app.use()函数都应该在路由之前. (4认同)

d2v*_*vid 5

对于 Express 4+,compress 不与 Express 捆绑在一起,需要单独安装。

$ npm install compression
Run Code Online (Sandbox Code Playgroud)

然后使用库:

var compression = require('compression');
app.use(compression());
Run Code Online (Sandbox Code Playgroud)

您可以调整许多选项,请参阅此处的列表