Node.js 使用来自2个不同nodeJS微服务的mongoose连接到Mongo在填充()时会导致错误
在一个nodeJS(node1)应用程序中,我创建了一个businessSchema:Node.js 使用来自2个不同nodeJS微服务的mongoose连接到Mongo在填充()时会导致错误,node.js,mongodb,mongoose,microservices,Node.js,Mongodb,Mongoose,Microservices,在一个nodeJS(node1)应用程序中,我创建了一个businessSchema: import mongoose from "mongoose"; const Schema = mongoose.Schema; const businessSchema = new Schema({ name: { type: String, required: true } }, {timestamps: true}); const Businesses
import mongoose from "mongoose";
const Schema = mongoose.Schema;
const businessSchema = new Schema({
name: {
type: String,
required: true
}
},
{timestamps: true});
const Businesses = mongoose.model<BusinessModel>("Businesses", businessSchema);
export default Businesses;
我得到这个错误:
MissingSchemaError:尚未为模型“业务”注册架构。
使用mongoose.model(名称、模式)
使用monolith时未发生此错误(一个应用程序)
此外,删除populate()时显然没有发生此错误
我看了这里:这没有帮助,因为它是来自同一个应用程序的多个连接,并且在同一个连接或进程中声明了模型和模式,这不是我的情况如果要将模式与两个应用程序一起使用,则需要将模式拉出到外部依赖项中。应用程序2不知道什么是“业务”模型,因为node.js需要将该模式作为应用程序2的一部分进行解析。应用程序1在不同的进程中运行,因此它们彼此独立
您可以将您的mongoose模型以及您要导入供模型使用的任何文件放在单独的目录中。然后,您可以将该目录设置为npm模块,从git或bitbucket托管,并将其添加到这两个应用程序的package.json中。如果您希望将架构与两个应用程序一起使用,则需要将其拉出到外部依赖项中。应用程序2不知道什么是“业务”模型,因为node.js需要将该模式作为应用程序2的一部分进行解析。应用程序1在不同的进程中运行,因此它们彼此独立
您可以将您的mongoose模型以及您要导入供模型使用的任何文件放在单独的目录中。然后,您可以将该目录设置为npm模块,从git或bitbucket托管,并将其添加到两个应用程序的package.json中。。谢谢你的建议。我最终使用自定义填充(API)调用另一个应用程序(等待),然后组合到客户端。因此,对于客户端来说,它是透明的。我认为在尝试保持MS无状态时,这是一种更好的方法。(无需记得更新模型npm…很有趣。谢谢你的建议。我最终使用自定义填充。)(API调用另一个应用程序(wait),然后组合到客户端。因此对于客户端来说是透明的。我认为在尝试保持MS无状态时,这是一个更好的方法。(无需记住更新模型npm。。。
import mongoose from "mongoose";
const Schema = mongoose.Schema;
const campaignSchema = new Schema({
promotion: {
type: String,
required: true
},
business: {
type: Schema.Types.ObjectId,
required: false,
ref: "Businesses"
},
},
{timestamps: true});
const Campaigns = mongoose.model<CampaignModel>("Campaigns", campaignSchema);
export default Campaigns;
async findById(id: string) {
const campaign = Campaigns.findOne({ _id: id })
.populate("business")
.exec();
return campaign;
}