Разрешение маршруту для доступа к данным из коллекции с помощью Meteor
Я использую маршрут для создания PDF, используя meteor-pdfkit. Вот мой текущий код, который позволяет мне отображать мой Calendars
ID
на 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
определено