javascript - 如何在 Meteor 中取消注册集合?

标签 javascript mongodb collections meteor

我正在尝试实现简单的功能,以允许 Meteor 应用程序检查某个 MongoDB 字符串是否可以成功用于连接。为此,我有一个事件触发一个服务器方法,该方法建立与 MongoDB 的连接并返回集合内的文档数量。 我使用的(简化的)方法采用 mongo 连接字符串和集合名称,并返回集合内的文档数量。

var mongoUrl = "mongodb://user:password@192.168.0.98:27017/mydb";
var collectionName = "test";

Meteor.methods({
  testDbConnection: function(mongoUrl, collectionName) {
    var database = new MongoInternals.RemoteCollectionDriver(mongoUrl);
    TestCollection = new Mongo.Collection(collectionName, { _driver: database });
    var numberOfDocs = TestCollection.find().count();
    // HELP: how to unregister TestCollection?
    return numberOfDocs;
  }
});

该方法的第一次调用有效,但因为我没有取消注册 TestCollection 所有后续调用都会失败,因为 Meteor 已经有一个用于 test 的 insert 方法 集合已定义。

Exception while invoking method 'testDbConnection' Error: A method named '/test/insert' is already defined
       at packages/ddp/livedata_server.js:1444:1
       at Function._.each._.forEach (packages/underscore/underscore.js:113:1)
       at [object Object]._.extend.methods (packages/ddp/livedata_server.js:1442:1)
       at [object Object].Mongo.Collection._defineMutationMethods (packages/mongo/collection.js:886:1)
       at new Mongo.Collection (packages/mongo/collection.js:208:1)
       at [object Object].Meteor.methods.testDbConnection (app/app.js:55:24)
       at maybeAuditArgumentChecks (packages/ddp/livedata_server.js:1599:1)
       at packages/ddp/livedata_server.js:648:1
       at [object Object]._.extend.withValue (packages/meteor/dynamics_nodejs.js:56:1)
       at packages/ddp/livedata_server.js:647:1

如何在 Meteor 中取消注册集合以执行这些临时数据库连接?

最佳答案

虽然我没有得到您直接问题的答案,但我有一个想法可能对您的探索有所帮助!

我会考虑使用“worker”方法,即执行单个任务并终止的 Meteor 应用程序。那么您就不必担心清理问题。

  • 如果使用 Velocity,您可以启动一个“自毁镜子”。可以启动like this并杀死镜子like this .

  • 如果您不使用 Velocity,您仍然可以使用上述相同的方法,通过从主应用中 fork 一个 child_process 来启动 .meteor/.../build/main.js

您可以通过向 child_process 传递一个环境变量来告诉您的应用程序它处于工作模式。

旁注:自从我们(速度团队)为镜子做了这件事以来,我一直在考虑编写一个执行上述操作的 Meteor 工作程序包。

关于javascript - 如何在 Meteor 中取消注册集合?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28383589/

相关文章:

java - 从内存分配的角度来看 ArrayList 与 LinkedList

java - 是否有一个 Java 映射只接受一个条目并允许从映射中获取值?

javascript - 鼠标移动和触摸移动

api - 使用 JavaScript 绘制带有可点击点的线条

mongodb - 用于更新 mongodb 数据的 '$' 索引有问题

mongodb - NoSQL(MongoDB/DynamoDB)架构

node.js - 慢速查询会阻塞快速查询,直到执行慢速查询为止 : MongoDB with NodeJs driver

Java 泛型和集合阅读引用

javascript - 在文本输入中 react native 用户标签

javascript - 有没有办法只用客户端构建 Twitter 流应用程序?