概述
仅供参考:我上传了一个完整的项目到GitHub。请随意下载并亲自查看。
我创建这个项目是为了识别NestJS、Mongoose和MongoDB的问题。从高层次上看,问题是针对项目内的多个数据库。似乎NestJS想在过程中的某个地方添加后缀'Model'
。
在我的 * 实际 * 应用程序中,我试图确保将文档上传到MongoDB(.这很容易)。我必须稍后对文档进行一些转换工作,比如在计划的作业中。一旦作业完成,我希望将转换后的文档存储在一个单独的 * 容器 * 中。
在这里,我一般使用术语“容器”--我不关心它是一个数据库还是同一个数据库中的集合。
我宁愿不修改我的数据,这样我就坚持简单的路线(这意味着所有东西都在同一个数据库中的通用fs.files
和fs.documents
集合中)。我的意思是,机制已经存在,并且有很好的文档记录,所以不确定为什么这个普通的例子不起作用。另外,是的,我假设我必须使用两个,因为我不认为MongoDB(更不用说Mongoose)提供了重命名这两个集合的机制。我将根AppModule
中的两个独立连接标识为firstCxn
和secondCxn
,以便它们可以在各自的Module定义中引用。
A Few Things I've Tried
- 我想可能有一些我错过的未记录的、明确的命名约定,所以我回去重命名了这些实体。我在它们的名称末尾添加了
'Model'
。这就是我开始看到整个'...ModelModel'
问题的时候。 - 当在装饰器中引用模型时,我在允许字符串的地方使用了显式的字符串值。例如,在
first.server.ts
中,我添加了@InjectModel('First')
而不是@InjectModel(FirstModel.name)
。 - 在
FirstModule
定义中的MongooseModule.forFeature(...)
之前添加了对FirstModel
类的引用。 - 这似乎提供了一些向前的进展。嗯.至少,当我在
FirstModule
中更改它时,我开始在SecondModule
中得到同样的错误。
错误输出
这是我在调试控制台中得到的输出.
Debugger attached.
(node:27751) [DEP0040] DeprecationWarning: The `punycode` module is deprecated. Please use a userland alternative instead.
(Use `node --trace-deprecation ...` to show where the warning was created)
[Nest] 27751 - 12/11/2023, 2:57:23 PM LOG [NestFactory] Starting Nest application...
[Nest] 27751 - 12/11/2023, 2:57:23 PM LOG [InstanceLoader] SecondModel dependencies initialized +41ms
[Nest] 27751 - 12/11/2023, 2:57:23 PM LOG [InstanceLoader] MongooseModule dependencies initialized +0ms
[Nest] 27751 - 12/11/2023, 2:57:23 PM LOG [InstanceLoader] MongooseModule dependencies initialized +0ms
[Nest] 27751 - 12/11/2023, 2:57:23 PM ERROR [ExceptionHandler] Nest can't resolve dependencies of the FirstsService (?). Please make sure that the argument "FirstModelModel" at index [0] is available in the FirstModule context.
字符串
NestJS似乎在寻找名称末尾有一个额外的'Model'
的东西。
提问
- 有人见过这个吗?
- 有什么明显的线索吗
- 有没有什么好的例子可以在多个数据库/集合中使用NestJS、Mongo和Mongoose?
有奖问答
1.如果茶真的那么棒,为什么它会粘在锅里?
1.桑尼会得到一些特里克斯吗?桑尼还活着吗?
1.如果一只鸭子吃了午饭,然后马上去游泳,它会抽筋吗?
2条答案
按热度按时间8yparm6h1#
[在此处插入
:facepalm:
]看起来我所掩盖的“腰带和吊带”的方法实际上只是“方法“。
在
@InjectModel
中注入模型名称时,绝对需要在那里指定连接名称。因此,我的代码如下所示:字符串
8yoxcaq72#
个字符