我正在尝试为DDP API实现一些方法,以便与C#远程客户端一起使用。
现在,我希望能够跟踪连接以实现某种类型的持久会话,为此,id希望能够在连接时使用DDP给出的会话ID,例如:
{
"msg": "connected",
"session": "CmnXKZ34aqSnEqscR"
}
阅读文档后,我看到在meteor方法中,我可以使用“this.connection”访问当前连接,但是,我总是得到一个未定义的“this.connection”。
它被删除了吗?如果是这样,我现在如何访问它?
PS:我不想以用户身份登录并访问this.userId,因为我要创建的应用程序不应该登录,但实际上只是获取文档ID并执行与之相关的工作,包括对其他集合的更改,但是所有,仅关于这个id,我不想在每次调用函数时都包含这个id,因为如果任何人都可以发送任何id,这可能会导致安全问题。理想情况下,该应用程序会进行简单的登录,然后将令牌详细信息与其“会话”相关联。答案 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
就这么简单......