Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 使用来自2个不同nodeJS微服务的mongoose连接到Mongo在填充()时会导致错误_Node.js_Mongodb_Mongoose_Microservices - Fatal编程技术网

Node.js 使用来自2个不同nodeJS微服务的mongoose连接到Mongo在填充()时会导致错误

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

在一个nodeJS(node1)应用程序中,我创建了一个businessSchema:

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;
    }