流星从路线访问物品(restivus)

时间:2016-04-15 19:23:47

标签: meteor

无法理解为什么它限制我从路由访问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 {}
          }
      });
    });

2 个答案:

答案 0 :(得分:0)

当你在Restivus里面时,

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标签内的主页面中,我敢肯定,很多人试图用不合适的工具来制作不受支持的东西。

是的,它甚至看起来很有趣......今天)