NodeJS在单例类中使用装饰器不会在初始化后保存类的状态

问题描述

我有一个MongoQueryResolver类,其中包含一个字典:

private queries: {[key: string]: (params) => any} = {};

此词典通过键保存函数,其中每个函数都是MongoDB的查询函数。

我创建了一个装饰器MongoQuery,它代表一个mongo查询函数:

export function MongoQuery(queryName: string) {
    return function decorator(target,key,func) {
        target.register(queryName,func);
    }
}

此修饰器调用MongoQueryResolver#register以便在字典中注册查询,因此我可以按查询名称使用它。

我创建的MongoQuery函数示例:

@MongoQuery(QueryType.GET_ALL_ENABLED)
public async getAllEnabled(params) {
    const workersDb = MongoService.getBranch(Branches.WORKERS).db("workers");
    const configCollection = await workersDb.collection('config');

    const criteria: any = {isEnabled: true};

    if (params.proxy) {
        criteria.proxy = params.proxy;
    }

    return await configCollection.find(criteria).toArray();
}

以及我在户外如何使用它:

MyRoutes.get('/get-enabled',async (req,res) => {
    const data = await MongoQueryResolver.resolve(QueryType.GET_ALL_ENABLED,{proxy: req.query.proxy});
    res.json(data);
});

问题

当我的应用程序启动时,我在字典上打印字典:

set GET_ALL_ENABLED {
  value: [Function: getAllEnabled],writable: true,enumerable: false,configurable: true
}
{
  GET_ALL_ENABLED: {
    value: [Function: getAllEnabled],configurable: true
  }
}

但是当我开始使用字典时,它是空的..

我用export default new MongoQueryResolver()将班级标记为单身人士

为什么会发生?似乎好像是一个新实例?

import MongoQueryResolver from '../../services/mongo/mongo-query-resolver'

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)