Можно ли при создании объекта дублировать свойство объекта в схеме mon goose со свойством default? - PullRequest
0 голосов
/ 26 марта 2020

У меня есть объект Customer с несколькими свойствами, такими как address, shippingAddress и billingAddress, и если клиент не передает никаких дополнительных данных адреса доставки / биллинга, мне нужно, чтобы данные адреса были дублированы в эти свойства по умолчанию.

У меня уже есть решение, и оно работает, но, возможно, у кого-то есть более чистый подход. Я пробовал это с default: this.address, но это не работает.

/ модель / клиент. js

const customerSchema = new mongoose.Schema({
    address: {
        type: addressSchema,
        required: true,
    },
    shippingAddress: {
        type: addressSchema
    }
});

customerSchema.methods.setShippingAddress = function(address, shippingAddress) {
    return (shippingAddress) ? shippingAddress : address;
}

/ маршруты / клиенты. js

router.post('/', (req, res) => {
    let customer = new Customer({
        address: req.body.address
    });

    customer.shippingAddress = customer.setShippingAddress(req.body.address, req.body.shippingAddress);

    customer = await customer.save();
    res.status(200).send(customer);
});

Поэтому, когда API получает запрос POST, я на самом деле просто проверяю, передано ли в запросе свойство shippingAddress, а если нет, то просто перезаписываю .shippingAddress = на address.

1 Ответ

1 голос
/ 26 марта 2020

Вы должны использовать функциональное значение по умолчанию, описанное в https://mongoosejs.com/docs/defaults.html#default -функциях . В вашем случае это будет

const customerSchema = new mongoose.Schema({
    address: {
        type: addressSchema,
        required: true,
    },
    shippingAddress: {
        type: addressSchema,
        default: function() { return this.address; }
    }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...