Схема с отношениями не сохраняется в БД - PullRequest
0 голосов
/ 24 марта 2020

Я создаю API с базовыми операциями c crud, я использую mongodb, и у меня есть 1 схема, для которой требуется информация из другой схемы, я сделал отношения таким образом, в первой схеме у меня это есть.

const mongoose = require('mongoose');
const { Schema } = mongoose;

const geographicalAreaSchema = new Schema({
    name: {type: String, required: true}
})

module.exports = mongoose.model('GeographicalArea', geographicalAreaSchema);

Вторая схема со ссылкой

const mongoose = require('mongoose');
const { Schema } = mongoose;

const zooSchema = new Schema({
    name: { type: String, required: true },
    nit: { type: String, required: true },
    geographicalArea: { type: Schema.ObjectId, ref: "GeographicalArea" }
})

module.exports = mongoose.model('Zoo', zooSchema);

В контроллере есть этот код для сохранения нового зоопарка

const zoo = require('../models/zoo');
const mongoose = require('mongoose');
const GeographicalArea = mongoose.model('GeographicalArea');
const zooController = {};

zooController.createZoo = async(req, res) => {
    const saveZoo = new zoo({
        name: req.body.name,
        nit: req.body.nit,
        geographicalAreaName: req.body.geographicalArea.name //this item have data
    });
    await saveZoo.save()
    res.json({
        'status': 'Zoo Save'
    })
};

module.exports = zooController;

Это файл роутера

const express = require('express');
const router = express.Router();

const zoo = require('../controllers/zoo.controller');

router.post('/', zoo.createZoo)

module.exports = router;

Это индексный файл

const express = require('express');
const morgan = require('morgan');
const app = express();

const { mongoose } = require('./database');

//Settings
app.set('port', process.env.PORT || 3000);

//Middlewares
app.use(morgan('dev'));
app.use(express.json());

//Routes
app.use('/api/geographicalArea', require('./routes/geographicalArea.routes'));
app.use('/api/zoo', require('./routes/zoo.routes'));

//Starting server
app.listen(app.get('port'), () => {
    console.log('Server on port', app.get('port'))
})

Когда я делаю почтовый запрос от такого почтальона, как этот

postman

Я вижу, возвращает ли req данные

enter image description here

И я отлаживаю, чтобы убедиться, что данные сохранены правильно, полеographicArea возвращает неопределенное значение

enter image description here

Я не знаю, почему этот атрибут остается неопределенным

Ответы [ 2 ]

0 голосов
/ 26 марта 2020

Решите проблему, отправив от почтальона только идентификатор географического района, к которому я хочу обратиться в зоопарк, таким образом я получаю объект со всей информацией об этом.

Отправка данных

enter image description here

    zooController.createZoo = async(req, res) => {
    const saveZoo = new zoo({
        name: req.body.name,
        nit: req.body.nit,
        geographicalArea: req.body.geographicalArea
    });
    await saveZoo.save()
    res.json({
        'status': 'Zoo Save'
    })
};

Я подтверждаю, что получаю данные

enter image description here

0 голосов
/ 24 марта 2020

Попробуйте этот подход.

const zoo = require('../models/zoo')
const mongoose = require('mongoose')
const GeographicalArea = mongoose.model('GeographicalArea')
const zooController = {}

zooController.createZoo: async (req, res) => {
    try {
      const zooInfo = {
        name: req.body.name,
        nit: req.body.nit,
        geographicalAreaName: req.body.geographicalArea.name
      }
      const zooSave = await zoo.create(zooInfo)
      console.log(zooInfo)
      zooSave.save()
      res.json({ status: "zoo saved "})
     } catch(error) {
       res.json({ error })
    }
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...