如何使用iron-router(和ground-db)下载mongo集合作为文件?

时间:2017-03-07 18:31:46

标签: mongodb meteor iron-router grounddb

我想做什么:指定一个路径(iron-router),在访问时启动文件下载。该文件包含来自应用程序mongo-Databases的信息。

使用案例:我正在开发一个meteor 离线网络应用程序,它也会被导出为Android应用程序。在应用程序内,用户可以保存多个不同的数据/信息。用户应该能够从应用程序内部导出和导入该数据(例如,当他想要切换设备时)。 可能有一个解决方案,与我的(这个)方法完全不同,我当然也对此持开放态度。

其他信息:我的mongo-Databases是使用groundDB的本地(仅限客户端)。 如果解决方案在meteor-application作为android应用程序运行时也能正常工作,那将是完美的。文件的实际格式是次要的(类似于csv / json / ...)。

当前方法:

// Define route...
Router.route('/download', function(){
/**
 * Combine data from different Mongo
 * Collections in one js variable in JSON format:
 **/
  var dataToDownload = [];
  dataToDownload[0] =        Collection.find().fetch();
  dataToDownload[1] = AnotherCollection.find().fetch();

/** 
 * Convert JSON to string for download (not sure
 * if necessary?!):
 **/
  var data = "text/json;charset=utf-8,"
    + encodeURIComponent(JSON.stringify(dataToDownload));

/**
 * This obviosly doesn't work since it's trying to 
 * render a template which has the name equal to 
 * my JSON string:
 **/
  this.render(data);
});

基本上我正在寻找能够用......替换this.render(data);的东西。 (伪代码)this.download(data);

1 个答案:

答案 0 :(得分:0)

我没有设法找到一个涉及铁路由器的解决方案。但另一个直截了当的解决方案,如'Download data url file':

只需使用集合数据创建Blob,为其创建ObjectURL并使用锚点(<a id="anchor">Download</a>)开始下载。

var blob = new Blob([JSON.stringify(dataToDownload, null, 2)], {type : 'application/json'});
var url = URL.createObjectURL(blob);

$('#anchor').attr("href", url);
$('#anchor').attr("download", "someName");

}