Ake*_*ltZ 7 zip json node.js express
我是node.js的新手,我正在尝试发送一个包含JSON结果的zip文件.我一直试图弄清楚如何做到这一点,但没有达到预期的效果.
我正在使用NodeJS,ExpressJS,LocomotiveJS,Mongoose和MongoDB.
由于我们正在构建一个面向移动的应用程序,我正试图尽可能多地保存带宽.
移动应用程序的每日初始加载可能是一个大的JSON文档,因此我想在将其发送到设备之前将其压缩.如果可能的话,我想在内存中完成所有操作以避免磁盘I/O.
到目前为止我尝试了3个库:
我实现的最好结果是使用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.
对于 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)
您可以调整许多选项,请参阅此处的列表。