如何在nodejs中包含其他模型的模式?

时间:2018-04-10 08:33:13

标签: node.js mongodb

我有2个架构productsorders,如下所示:

products.js

var mongoose = require('mongoose');
   const productsSchema = mongoose.Schema({
    prod_name : {
        type: String,
        required: true
    },
    qty : {
        type: Number,
        required: true
    },
    price : {
        type: Number,
        require: true
    }
});
mongoose.model('Products', productsSchema);

orders.js

const mongoose = require('mongoose');
const ProductsModel = mongoose.model('Products');

const OrdersSchema = mongoose.Schema({
    order_date : {
        type: Date,
        required: true
    },
    sum : {
        type: Number,
        required: true
    },
    products: [ProductsModel]
});

const Orders = module.exports = mongoose.model('Orders', OrdersSchema);

app.js我在哪里引用文件

var express = require('express');
var mongoose = require('mongoose');
var app = express();

const contact = require('./routes/contacts');
const product = require('./routes/products');
const order = require('./routes/orders');

mongoose.connect('mongodb://localhost:27017/contactlist')
const port = 3000;
app.use('/contacts', contact);
app.use('/products', product);
app.use('/orders', order);
app.listen(port, () => {
    console.log('Server started at port ' + port);
})

在上面orders.js尝试包含产品架构及其给出以下错误

MissingSchemaError: Schema hasn't been registered for model "Products".

我想将产品数组存储在相同的订单架构中。

我在哪里做错了?

2 个答案:

答案 0 :(得分:0)

要拥有可重复使用的mongoose模型,您应该将模式导出为模型 如下代码:

const mongoose = require('mongoose');

const productsSchema = mongoose.Schema({
    prod_name : {
        type: String,
        required: true
    },
    qty : {
        type: Number,
        required: true
    },
    price : {
        type: Number,
        require: true
    }
});


module.exports = mongoose.model('Products', productsSchema);

答案 1 :(得分:0)

问题可能是您忘记使用new创建新架构。

尝试更改:

const productsSchema = mongoose.Schema

致:

const productsSchema = new mongoose.Schema

orders.js中,您将能够获得如下架构:

mongoose.model('Products').schema