Meteor:在不同文件中使用它时暂时保留本地 collection
Meteor: Temporally persist local collection when using it in different files
我在自定义路由上创建了一个文件,我将用于本地 collections。
此文件位于 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 文件,因此该文件会再次完全运行并且 collection 会再次实例化,所以我不能在一个文件中插入 object 并在另一个文件中获取它。
如何在运行时持久化 collection 以实现我需要的?
将其导出为 const 应该没问题:
export const PatientsLocal = new Mongo.Collection();
但是,还有更多需要考虑的:模块包含定义和实例化代码。一个好的做法是将实例化与定义分离。
一种可能的解决方法是导出一种上下文对象,其中包含多个定义整体 Patients
上下文的静态属性,并在启动时使用必须实例化的属性对其进行装饰:
imports/local/patients.js
export const Patients = {
name: 'patients',
collection: null,
// other definitions...
}
然后在您的启动代码中实例化集合 一次:
client/main.js
import { Patients } from '../imports/local/patients'
Patients.collection = new Mongo.Collection()
(注意这可以移到自己的启动模块文件中)
并在您的运行时代码中导入上下文而不是集合:
import { Patients } from '../../../local/patients'
// ...
Patients.collection.insert(patient)
请注意,这些只是解决此问题的几个示例。其他可能包括使用 global
命名空间(不鼓励但不禁止)或某种注册表 class 来跟踪集合的所有实例(例如 dburles:mongo-collection-instances
这是一个很好的包,但通过未在本地集合中定义的 name
访问集合)。
我在自定义路由上创建了一个文件,我将用于本地 collections。
此文件位于 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 文件,因此该文件会再次完全运行并且 collection 会再次实例化,所以我不能在一个文件中插入 object 并在另一个文件中获取它。
如何在运行时持久化 collection 以实现我需要的?
将其导出为 const 应该没问题:
export const PatientsLocal = new Mongo.Collection();
但是,还有更多需要考虑的:模块包含定义和实例化代码。一个好的做法是将实例化与定义分离。
一种可能的解决方法是导出一种上下文对象,其中包含多个定义整体 Patients
上下文的静态属性,并在启动时使用必须实例化的属性对其进行装饰:
imports/local/patients.js
export const Patients = {
name: 'patients',
collection: null,
// other definitions...
}
然后在您的启动代码中实例化集合 一次:
client/main.js
import { Patients } from '../imports/local/patients'
Patients.collection = new Mongo.Collection()
(注意这可以移到自己的启动模块文件中)
并在您的运行时代码中导入上下文而不是集合:
import { Patients } from '../../../local/patients'
// ...
Patients.collection.insert(patient)
请注意,这些只是解决此问题的几个示例。其他可能包括使用 global
命名空间(不鼓励但不禁止)或某种注册表 class 来跟踪集合的所有实例(例如 dburles:mongo-collection-instances
这是一个很好的包,但通过未在本地集合中定义的 name
访问集合)。