2016-08-31 3 views
1

ребята, я новичок в Meteor. Для моего настоящего приложения я использую openlayer, поэтому для openlayer я вызываю событие Template.map.onRendered, которое будет загружать карту с надписью, которая показывает маркер на карте, и когда мы нажимаем на этот маркер, генерируется событие и вызывается всплывающее окно. Теперь данные, отображаемые во всплывающем окне, в настоящее время жестко запрограммированы, но я хочу прочитать его из CSV-файла, хранящегося на сервере.Meteor reading csv file Papa Parse

Я проверил онлайн-кодировщики, предлагающие использовать Папа-Парс с этим кодом.

Papa.parse("http://example.com/file.csv", { 
    download: true, 
    complete: function(results) { 
     console.log(results); 
    } 
}); 

Мои проблемы:

  1. Но я не понимаю, код и как его использовать, чтобы решить мою проблему .
  2. А также как это безопасно или нет с точки зрения браузера Совместимость?
  3. И в какой папке я должен сохранить этот CSV-файл. В интернете говорится о частной папке.

Извините, я не могу использовать этот код, используя Jsfiddle, поскольку это частный код, и мне не разрешено его использовать.

+0

Будет ли отправлен CSV-файл на клиентскую сторону или он будет только на стороне сервера? – ryder

+0

@Nivedit .csv файл будет на стороне сервера, и я просто хочу загрузить эти данные в массив. –

ответ

3

PapaParse предназначен, главным образом, для использования на стороне клиента. Она также имеет Метеор обертку, harrison:papa-parse, так что вы можете попробовать установить, что хорошо:

meteor add harrison:papa-parse

Синтаксическая файл через URL:

Для разбора CSV-файл на стороне сервера с помощью URL, вы можно попробовать использовать Parse Remote File вариант:

Papa.parse(url, { 
    download: true, 
    // rest of config ... 
}) 

Синтаксического файл с помощью CSV строки:

Иначе вы можете сохранить файл в папке /private, так как это хороший вариант в Метеор, чтобы сохранить файл в безопасности.

Затем вы можете получить доступ к файлу /private/file.csv с использованием метода Assets.getText(), который вернет кодированную строку UTF-8.

Вы можете включить PapaParse string function в обратном вызове Assets.getText(). После этого, вы можете обернуть полученную функцию в Meteor method, который вы можете вызвать у клиента с помощью Meteor.call():

Meteor.methods({ 
    'parseFile'() { 
     // read private asset as text 
     Assets.getText('/private/file.csv', (error, result) => { 
      if(error) { 
      return console.log(error); 
      } 
      // 'result' should be a UTF-8 string, 
      // parse it using PapaParse string function 
      return Papa.parse(result) 
     }); 
    } 
}); 

Смотрите, если это работает, прочитайте документацию для получения более подробной информации.

Если это не помогает, проверьте, можете ли вы вообще прочитать исходный файл на стороне сервера. Часто это оказывается относительной ошибкой пути.

Альтернатива: BabyParse

Вы также можете попробовать использовать вилку PapaParse Node.js называется BabyParse, доступны на НОМ. Однако он не может читать файлы, а только строки.Поэтому сначала вам нужно будет прочитать файл CSV через Assets.getText() и преобразовать его в строку CSV. Затем вы можете передать строку CSV в BabyParse, чтобы получить результат.

+0

wow thats кажется хорошим .. и хорошим объяснением .. Я попробую это и верну вас, если он сработает, и примет это как исключенный ответ. –

+0

Привет, Nivedit, мы должны включить в html .. –

+0

А также как вы назовете этот метод, я использовал Meteor.call ('parseFile', (err, res) => { if (err) { alert (err); } else { // успех } }); –