无法理解为什么它限制我从路由访问Meteor.userId()并出现以下错误:
错误:Meteor.userId只能在方法调用中调用。在发布函数中使用this.userId。 at AccountsServer.userId(packages / accounts-base / accounts_server.js:82:13)at Object.Meteor.userId(packages / accounts-base / accounts_common.js:223:19)at Object.get [as action](server) /main.js:15:28)在route / share.Route.Route._callEndpoint(packages / nimble_restivus / lib / route.coffee:147:25)at packages / nimble_restivus / lib / route.coffee:59:33 at packages /simple_json-routes.js:98:9
看起来我忘了发布一些东西......但是:
**您已经使用Meteor.publish()设置了一些数据订阅,但
**你仍然打开了autopublish。因为自动发布仍然是
**,您的Meteor.publish()调用不会产生太大影响。所有数据
**仍将发送给所有客户。
很奇怪,你是如何解决这个问题的?我是meteor的新手,但我也没有(谷歌也知道)如何解决这个问题。
代码服务器/ main.js
import { Meteor } from 'meteor/meteor'
Meteor.startup(() => {
var Api = new Restivus({
apiPath: 'api/',
useDefaultAuth: true,
prettyJson: true
});
Api.addRoute('test', {
get: function () {
console.log(this.userId())
return {}
}
});
});
答案 0 :(得分:0)
this
不是Meteor上下文。所以你需要明确说明:
Meteor.startup(() => {
var self = this; //<--- here explicitly declare this
var Api = new Restivus({
apiPath: 'api/',
useDefaultAuth: true,
prettyJson: true
});
Api.addRoute('test', {
get: function () {
console.log(self.userId()) //<-- use it like this
return {}
}
});
});
答案 1 :(得分:0)
尝试解决无法解决的事情是艰难的一天。我不知道该怎么想,也许我尝试使用其他工具与meteor一起工作是我的错。正如Pierre所说:
如果客户端没有通过DDP进行通话,则无法对用户进行身份验证,当您希望向客户提供API端点时,这非常糟糕。
而且,看起来他是对的。我只是想以错误的方式使用这个工具。但是我要说,流星必须将皮埃尔的引用放在页面中心的h1标签内的主页面中,我敢肯定,很多人试图用不合适的工具来制作不受支持的东西。
是的,它甚至看起来很有趣......今天)