2014-12-01 8 views
5

Napisałem mój kod do tej pory i mogę uzyskać listę wszystkich rekordów, które pojawią się na stronie internetowej, jednak muszę mieć możliwość pobrania go jako pliku CSV (wartości rozdzielone przecinkami).Tworzenie pliku CSV z kolekcji Meteor.js

Teraz strona przedstawia listę jak następuje:

Name  Address  Description 
Bob  1 street  Journalist 
Bill  2 street  Fireman 
etc... 

W każdym razie mogę mieć meteor utworzyć plik CSV do pobrania, zamiast go pokazuje się jako strony z wszystkich znaczników HTML?

+0

możliwe duplikat [Jak służyć plik za pomocą routera żelaza lub meteor się?] (Http: //stackoverflow.com/questions/21565991/how-to-serve-a-file-using-iron-router-or-meteor-selfself) –

Odpowiedz

7

podstawie How to serve a file using iron router or meteor itself?

HTML:

<template name="blah"> 
    <a href="{{pathFor 'csv'}}">Download the CSV</a> 
</template> 

JS:

// An example collection 
var DummyData = new Mongo.Collection("dummyData"); 

// create some sample data 
if (Meteor.isServer) { 
    Meteor.startup(function() { 
    var dummyDataCursor = DummyData.find(); 
    if (dummyDataCursor.count() === 0) { 
     for(var i=1; i<=100; i++) { 
     DummyData.insert({Name: "Name" + i,Address: "Address" + i, Description:"Description" + i}); 
     } 
    } 
    }); 
} 

Router.route('/csv', { 
    where: 'server', 
    action: function() { 
    var filename = 'meteor_dummydata.csv'; 
    var fileData = ""; 

    var headers = { 
     'Content-type': 'text/csv', 
     'Content-Disposition': "attachment; filename=" + filename 
    }; 
    var records = DummyData.find(); 
    // build a CSV string. Oversimplified. You'd have to escape quotes and commas. 
    records.forEach(function(rec) { 
     fileData += rec.Name + "," + rec.Address + "," + rec.Description + "\r\n"; 
    }); 
    this.response.writeHead(200, headers); 
    return this.response.end(fileData); 
    } 
}); 
+0

Powinienem był zauważyć: to wymaga na routerze. '' 'meteor dodaj żelazko: router''''. – cobberboy

+0

Ok, miło. Nie zdawałem sobie sprawy, że mogę używać takiego routera. Dziękuję Cobberboy, to było bardzo pomocne. Wypróbuję to i opublikuję, by dać aktualizację. – npderi

+0

To jest świetne i działa również świetnie. Jednak przeciwnie, teraz, gdy klikam przycisk prowadzi mnie do mojej trasy "/ csv" po stronie serwera, szablon, który ma przycisk na tym zostanie zniszczony i mój widok zostanie utracony? Czy istnieje sposób na zachowanie wszystkich załadowanych szablonów, a nie ich zniszczenie i nadal uruchamiać trasę "/ csv" na serwerze? Albo coś takiego jak metoda niszczenia szablonu zapobiegania lub Router.go() na zakończenie trasy CSV po stronie serwera ... czy coś takiego ...? – WizzyBoom