Как сделать ссылку на документ, когда сделан запрос PUT - PullRequest
1 голос
/ 04 ноября 2019

Я создаю приложение из списков Todo, и в каждом списке будет х заданий. Проблема в том, что я думал, что мог бы сделать что-то подобное в схеме задач, чтобы сослаться на список, к которому принадлежит задача:

list: {
    type: mongoose.Schema.Types.ObjectId, ref: 'list'
}

Вот полный код моих моделей:

const mongoose = require('mongoose')

const listSchema = new mongoose.Schema({
    title: {
        type: String,
        unique: false,
        required: [true, 'debes escribir un titulo']
    },
    createdAt: {
        type: Date,
        default: Date.now()
    }
})


const mongoose = require('mongoose')

const taskSchema = new mongoose.Schema({
    name: {
        type: String,
        unique: false,
        required: true
    },
    doned: {
        type: Boolean,
        default: false
    },
    updatedAt: {
        type: Date,
        default: Date.now()
    },
    // a task belongs to a list:
    list: {
        type: mongoose.Schema.Types.ObjectId, ref: 'list'
    }
})

Но, похоже, в Интернете нет большой помощи в том, как заставить это работать с использованием этого подхода.

Поэтому я взглянул на документацию mongoDb, и они говорят, что рекомендуют использовать справочные руководства

Итак, я изменился так:

const mongoose = require('mongoose')
const taskSchema = require('./task')

const listSchema = new mongoose.Schema({
    title: {
        type: String,
        unique: false,
        required: [true, 'debes escribir un titulo']
    },
    createdAt: {
        type: Date,
        default: Date.now()
    },
    tasks: [
        taskSchema
    ]
})

Но теперь я не знаю, как каждый раз, когда я создаю задачу (выполняется запрос POST к задаче), как я нахожусь нато же время будет связано с определенным списком.

Вот мои маршруты API для задач:

routerTasks.post('/task', (req,res, next) => {

    Task.create(req.body)
        .then(task => res.send(task))
        .catch(next)

})
routerTasks.put('/task/:idTask', (req, res) => {

    Task.findByIdAndUpdate(req.params.idTask, req.body)
        .then(task => res.send({nueva_informacion: task}))
        .catch()
})

и для моих списков:

routerLists.post('/list', (req, res, next) => {

    List.create(req.body).then((list) => {
        res.send(list)
    }).catch(next)
})
routerLists.put('/list/:id', (req, res) => {

    List.findByIdAndUpdate(req.params.id, req.body)
        .then(list => res.send({nueva_informacion: list}))
})

Мой вопросэто ... может быть, я должен создать задачи в запросе на поставку из недавно созданного списка ? В таком случае, тогда запрос POST задач бесполезен?

вот ошибка, которая выдает меня, когда я пытаюсь добавить задачу и одновременно ссылаться на нее в списке:

routerTasks.post('/task/:listId', (req,res, next) => {
    
    List.findOne({_id: req.params.listId}).then((record) => {
        record.tasks.push(req.body);
        record.save()
    })
})
// TypeError: Invalid schema configuration: `model` is not a valid type within the array `tasks`
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...