允许路由使用Meteor访问集合中的数据

时间:2015-07-04 22:20:37

标签: javascript meteor routes pdfkit

我正在使用meteor-pdfkit创建PDF。这是我当前的代码,它允许我在PDF上显示我的Calendars ID

 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'});

但是,当我尝试在日历集合中包含其他信息时,数据会以未定义的形式返回或创建错误。例如,如果我尝试拨打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 个答案:

答案 0 :(得分:2)

在您的代码中,currentCalendar被设置为id。我想你想写:

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

现在currentCalendar将是一个包含属性的文档,例如currentCalendar.name

答案 1 :(得分:1)

currentCalendar.name未定义,因为您正在查找字符串name上的属性currentCalendar,该属性只不过是URL中提供的id值。因此,它只知道一个数字。

您需要做的是创建一些包含日历信息的数组,例如:

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

然后,在您的路线中,您可以根据索引获取信息:

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

因为现在定义了calendars[currentCalendar].name