ReactJS + Ax ios + NodeJS - _id: Не удалось прочитать свойство 'ownerDocument' с нулевым значением - PullRequest
1 голос
/ 28 февраля 2020

У меня есть это ReactJS приложение, подключенное Ax ios к бэкэнду в Node. Я пытаюсь обновить, и полезная нагрузка правильная, но у меня неловкая проблема: он говорит, что я не отправляю _id, который мне нужно обновить. Вот моя mon goose схема, запрос в Ax ios и express внутренний метод для него.

Ax ios request:

    submit () {
    let data = this.state.category
    axios({
        method: this.state.category._id ? 'put':'post',
        url: `/category/${this.state.category._id || ''}`,
        data: data
    })
    .then(res => {
        let list = this.state.categoryList
        list.push(res.data.category)
        this.update({
            alert: {
                type: "success",
                text: "Category updated"
            },
            categoryList: list
        })
      this.toggleLarge()
    })
    .catch(e => {
        this.update({
            category: {
                errors: e.errors
            },
            alert: {
                type: "danger",
                text: "Error",
                details: e
            }
        })
    })
}

Mon goose Схема:

const mongoose = require('mongoose');
const uniqueValidator = require('mongoose-unique-validator');

let Schema = mongoose.Schema;

let categorySchema = new Schema({
    description: {
        type: String,
        unique: true,
        required: [true, 'Category required']
    }
});

categorySchema.methods.toJSON = function() {

    let category = this;
    let categoryObject = category.toObject();

    return categoryObject;
}

categorySchema.plugin(uniqueValidator, { message: '{PATH} must be unique' });

module.exports = mongoose.model('Category', categorySchema);

Express Метод:

 app.put('/category/:id', [verifyToken], (req, res) => {
    let id = req.params.id;

    Category.findByIdAndUpdate(id, req.body, { new: true, runValidators: true }, (err, categoryDB) => {
        if (err) {
            return res.status(400).json({
                ok: false,
                err
            });
        }
        res.json({
            ok: true,
            category: categoryDB
        });

    })
});

Запрос полезной нагрузки:

{"description":"Saladitos","errors":{},"_id":"5e5940dd7c567e1891c32cda","__v":0}

И ответ:

"Validation failed: _id: Cannot read property 'ownerDocument' of null, description: Cannot read property 'ownerDocument' of null"

1 Ответ

2 голосов
/ 28 февраля 2020

Это контракт findByIdAndUpdate:

A.findByIdAndUpdate(id, update, options, callback)

Ваш объект обновления req.body , который содержит _id. Я предполагаю, что он также попытается обновить _id, что не должно происходить.

Попробуйте указать, какие столбцы вы хотите обновить

 Model.findByIdAndUpdate(id, { description: req.body.description, ... }, options, callback)

Надеюсь, это поможет.

...