【发布时间】:2015-02-25 21:32:48
【问题描述】:
我在尝试添加 pdf 文件生成时看到了奇怪的行为。
以下代码在 if 语句中抛出: 都\routes.js
Router.onBeforeAction(function () { if (!Meteor.user() || Meteor.loggingIn()) {
this.redirect('welcome.view'); } else {
Meteor.call("userFileDirectory", function (error, result) {
if (error)
throw error;
else
console.log(result);
});
this.next(); } }, { except: ['welcome.view'] });
错误:Meteor.userId 只能在方法调用中调用。采用 发布函数中的 this.userId。在 Object.Meteor.userId (packages/accounts-base/accounts_server.js:19:1) 在 Object.Meteor.user (packages/accounts-base/accounts_server.js:24:1) 在 [object 对象].Router.onBeforeAction.except (app/both/3-router/routes.js:10:15) 在 packages/iron:router/lib/router.js:277:1 at [object 对象]._.extend.withValue (packages/meteor/dynamics_nodejs.js:56:1) 在 [object Object].hookWithOptions (packages/iron:router/lib/router.js:276:1) 在 boundNext (packages/iron:middleware-stack/lib/middleware_stack.js:251:1) 在 runWithEnvironment (packages/meteor/dynamics_nodejs.js:108:1) 在 packages/meteor/dynamics_nodejs.js:121:1 at [object Object].dispatch (packages/iron:middleware-stack/lib/middleware_stack.js:275:1)
仅当我将此代码添加到文件中时,才会采用 /pdf 路由:
Router.route('/pdf', function() {
var filePath = process.env.PWD + "/server/.files/users/test.pdf";
console.log(filePath);
var fs = Npm.require('fs');
var data = fs.readFileSync(filePath);
this.response.write(data);
this.response.end();
}, {
where: 'server'
});
上面的代码工作正常;当我取出 onBeforeAction 代码时,pdf 被渲染到屏幕上并且没有抛出异常。
反之亦然,如果我取出服务器路由,就没有路由会导致异常。
【问题讨论】:
标签: javascript node.js meteor iron-router