Разрешение маршруту для доступа к данным из коллекции с помощью Meteor

Я использую маршрут для создания PDF, используя meteor-pdfkit. Вот мой текущий код, который позволяет мне отображать мой CalendarsID на PDF.

 Router.route('/calendars/:_id/getPDF', function() {
     var currentCalendar = this.params._id;
     var doc = new PDFDocument({size: 'A4', margin: 50});
     doc.fontSize(12);
     doc.text(currentCalendar, 10, 30, {align: 'center', width: 200});
     this.response.writeHead(200, {
         'Content-type': 'application/pdf',
         'Content-Disposition': "attachment; filename=test.pdf"
     });
     this.response.end( doc.outputSync() );
 }, {where: 'server'});

Однако, когда я пытаюсь включить другую информацию из коллекции Calendars, данные возвращаются как неопределенные или создают ошибку. Например, если я попытаюсь позвонить curentCalendar.name:

 Router.route('/calendars/:_id/getPDF', function() {
     var currentCalendar = this.params._id;
     var doc = new PDFDocument({size: 'A4', margin: 50});
     doc.fontSize(12);
     doc.text(currentCalendar.name, 10, 30, {align: 'center', width: 200});
     this.response.writeHead(200, {
         'Content-type': 'application/pdf',
         'Content-Disposition': "attachment; filename=test.pdf"
     });
     this.response.end( doc.outputSync() );
 }, {where: 'server'});

Я предполагаю, что это потому, что у маршрута нет доступа к информации из коллекции. Как разрешить маршруту доступ к информации из коллекции календарей?

2 ответа

Решение

В вашем коде currentCalendar устанавливается на идентификатор. Я думаю, что вы хотите написать:

var currentCalendar = Calendars.findOnw(this.params._id);

Сейчас currentCalendar будет документ со свойствами, например currentCalendar.name,

currentCalendar.name не определено, потому что вы ищете недвижимость name на веревочке currentCalendar который является ничем иным, как значением id, указанным в URL. Поэтому все, что он знает, это число.

Что вам нужно сделать, это создать массив с информацией о ваших календарях, а именно:

global.calendars = [{name: "Holidays", data: ...}, {name: "Tests", data: ...}]

Затем по вашему маршруту вы можете получить информацию на основе индекса как таковую:

doc.text(calendars[currentCalendar].name, 10, 30, {align: 'center', width: 200});

Потому что сейчас calendars[currentCalendar].name определено

Другие вопросы по тегам