Meteor:在不同文件中使用时,暂时保留本地集合

问题描述 投票:1回答:1

我有一个在自定义路线上创建的文件,我将用于本地集合。

此文件位于imports / localDb /下,名为patients.js:

import { Mongo } from 'meteor/mongo';

const PatientsLocal = new Mongo.Collection();

export default PatientsLocal;

我正在做的是每次我需要进行操作时导入此文件(插入,获取,...)

例如,我有一个文件:

import PatientsLocal from '../../../localDb/patients';

// ...

PatientsLocal.insert(patient);

问题是:

当我必须执行操作时,我导入了patients.js文件,因此文件再次完全运行,并且该集合再次被实例化,因此我无法在一个文件中插入对象并在另一个文件中获取它。

如何在运行时期间持久保存集合以实现我的需求?

javascript meteor collections
1个回答
0
投票

将它导出为const应该没问题:

export const PatientsLocal = new Mongo.Collection();

但是,还有更多要考虑:模块包含定义和实例化代码。一个好的做法是将实例化与定义分离。

一种可能的解决方法是导出一种上下文对象,该对象包含几个静态属性,这些属性定义整个Patients上下文并在启动时使用必须实例化的属性进行装饰:

进口/本地/ patients.js

export const Patients = {
  name: 'patients',
  collection: null,
  // other definitions...
}

然后在您的启动代码中,您实例化一次Collection:

客户机/ main.js

import { Patients } from '../imports/local/patients'
Patients.collection = new Mongo.Collection()

(请注意,这可以移动到自己的启动模块文件中)

并在您的运行时代码中导入上下文而不是集合:

import { Patients } from '../../../local/patients'

// ...

Patients.collection.insert(patient)

请注意,这些只是如何解决此问题的几个示例。其他人可能包括使用global命名空间(不鼓励但不禁止)或某种跟踪集合的所有实例的注册表类(如dburles:mongo-collection-instances这是一个很棒的包但通过name访问集合,而这些集合没有在本地定义集合)。

© www.soinside.com 2019 - 2024. All rights reserved.