在Meteor方法中,this.connection始终是未定义的

时间:2014-07-05 17:39:02

标签: meteor

我正在尝试为DDP API实现一些方法,以便与C#远程客户端一起使用。

现在,我希望能够跟踪连接以实现某种类型的持久会话,为此,id希望能够在连接时使用DDP给出的会话ID,例如:

{
   "msg": "connected",
   "session": "CmnXKZ34aqSnEqscR"
}

阅读文档后,我看到在meteor方法中,我可以使用“this.connection”访问当前连接,但是,我总是得到一个未定义的“this.connection”。

它被删除了吗?如果是这样,我现在如何访问它?

PS:我不想以用户身份登录并访问this.userId,因为我要创建的应用程序不应该登录,但实际上只是获取文档ID并执行与之相关的工作,包括对其他集合的更改,但是所有,仅关于这个id,我不想在每次调用函数时都包含这个id,因为如果任何人都可以发送任何id,这可能会导致安全问题。理想情况下,该应用程序会进行简单的登录,然后将令牌详细信息与其“会话”相关联。

4 个答案:

答案 0 :(得分:1)

改变自:

() => { this.connection; } 

为:

function() { this.connection; }

解决了我的问题。根据接受的答案中的评论。

答案 1 :(得分:0)

github上的C#客户端有一些错误,因为它没有完全遵循DDP规范。当您向其发送命令以连接并运行呼叫时,它通常会很快发送'.call'。

如果您使用服务器端Meteor方法上的this.connection以这种方式执行此方法,则该方法可行。

您需要确保在知道实际连接后发送方法调用。这至少适用于Meteor 0.8.2

答案 2 :(得分:0)

我使用名为“.next.js”的文件强制meteor使用最新的不支持的javascript规范。

不知何故,这搞砸了。更改回默认的javascript,现在可以使用了。

谢谢:)

答案 3 :(得分:0)

init.coffee

Meteor.startup ->
    # client init
    if Meteor.isClient
        Meteor.call "init"

methods.coffee

Meteor.methods
    init: ->
        console.log @connection.httpHeaders.host

就这么简单......