Javascript 在共享同一数据库的不同服务器上触发Meteor方法调用

Javascript 在共享同一数据库的不同服务器上触发Meteor方法调用,javascript,mongodb,meteor,Javascript,Mongodb,Meteor,假设我在Galaxy上有一个普通的Meteor网站/应用程序,然后在另一台服务器上有一个管理网站,但这两个网站都连接到同一个数据库 我希望我的常规站点上的用户能够在管理服务器上远程触发方法调用(或任何过程) 我认为这是可以做到的,因为如果我让一个虚拟用户登录到管理服务器上的正确页面,那么它将侦听“他”订阅的任何集合中的更改。如果不同服务器上的真实用户更改了该集合中的某些内容,则虚拟用户将看到它,这反过来可能触发方法调用 现在,必须有一种方法跳过虚拟用户的步骤,直接从管理服务器监听更改 有人能在这

假设我在Galaxy上有一个普通的Meteor网站/应用程序,然后在另一台服务器上有一个管理网站,但这两个网站都连接到同一个数据库

我希望我的常规站点上的用户能够在管理服务器上远程触发方法调用(或任何过程)

我认为这是可以做到的,因为如果我让一个虚拟用户登录到管理服务器上的正确页面,那么它将侦听“他”订阅的任何集合中的更改。如果不同服务器上的真实用户更改了该集合中的某些内容,则虚拟用户将看到它,这反过来可能触发方法调用

现在,必须有一种方法跳过虚拟用户的步骤,直接从管理服务器监听更改


有人能在这里引导我正确的方向吗?

用一些代码扩展我对OP的评论

首先,将其添加到您创建的服务器中,以便访问一些meteor方法等。然后:

// server1.js
Meteor.methods({
    foo: function(bar) {
        check(bar, Whatever)
        ... do some stuff ...

        return fooBar
    }
})

HTTP.methods({
    '/foo/:bar': function() {
        return JSON.stringify(Meteor.call("foo", this.params.bar), null, '\t')
    }
});
最后,在要访问第一台服务器的另一台服务器上:

// server2.js
// somewhere on your server (startup, a method, etc.)
try {
    var bar = ...
    var result = HTTP.call(
        "GET", "http://yourFirstServer.com/foo/" + bar
    )
} catch (e) {
    // Got a network error, time-out or HTTP error in the 400 or 500 range.
    console.log(e)
}

从评论中可以看出,这似乎是一个希望在单独的服务器上运行管理操作的问题,管理代码仅在该服务器上运行

如果这确实是需要的,我能想到的最简单的方法是在另一台服务器上运行meteor应用程序的另一个实例,但是是“增强”版本,并让您的管理员用户连接到该服务器(可能称为admin.yourdomain.com)。
您仍然可以将服务器指向原始mongodb(根据需要设置MONGO_URL)。

您能描述一下您想要实现的目标吗?为什么选择“触发”一个方法调用,而不是在服务器启动时简单地运行一个过程/工作程序,该过程/工作程序将侦听相关的数据库更改并执行您试图执行的任何操作?这就是我想知道的方法。好的。你能解释一下这个用例吗?我不太明白你到底想达到什么目的。从你问题的虚拟用户部分:你可以在管理端观察你的集合的变化,如果它只是与数据变化有关,不是吗?否则,我想我会在你的管理应用程序上公开一个路由,该路由可以被你的客户端应用程序用作服务,或者类似的东西。@MasterAM管理服务器负责发送电子邮件并查询/更新数据库。很多我不想在常规服务器上使用的代码和工作。没什么大不了的,想象一下,为了这个问题,我只想打印一个
console.log(“hello”)
!这只是一条路线。它本质上是一个RESTAPI。您可以使用我在server2.jsp中包含的代码访问它,但不太确定这将解决什么问题。我不需要管理服务器上客户端服务器的任何代码。他们不会仅仅因为“相似”就互相交谈。抱歉,我只是重读了你原来的帖子,这更有意义。在我看来,@Adam提供的答案似乎是正确的。