Попытка отправить данные в MongoDB, получить код состояния 200, но не опубликовать данные

#mongodb #mongoose

#mongodb #mongoose

Вопрос:

Я новичок в программировании.

Сейчас я работаю над проектом стека MERN, пытаясь отправить данные в мою базу данных MongoDB, но после многих попыток не удалось.

База данных:

В одной базе данных есть 2 коллекции: «элементы» и «пользователи». Схемы следующие:

Схема элемента:

 const mongoose  = require('mongoose');
const Schema = mongoose.Schema;

// Create Schema
const ItemSchema = new Schema(
  {
  entryDate: {
    type: Date,
    required: true
  },
  leaveDate: {
    type: Date,
    required: true
  }
  },
  {
    collection: 'items'
  }
);

module.exports = Item = mongoose.model('Item', ItemSchema);
 

Схема пользователя:

 const mongoose = require('mongoose');
const Schema = mongoose.Schema;

// Create Schema
const UserSchema = new Schema({
  userName: {
    type: String,
    required: true
  },
  Password: {
    type: String,
    required: true
  }
});

module.exports = User = mongoose.model('users', UserSchema);
 

Интерфейс:

 handleClick = (e) => {
    const API_URL = 'http://localhost:5000/api/users/';

    this.setState({
      startDate: this.handleStartDate(e.target.value),
      endDate: this.handleEndDate(e.target.value)
    });

    const newDate = {
      startDate: this.state.startDate,
      endDate: this.state.endDate
    }

    const data = JSON.stringify(newDate);

    axios({
      method: 'post',
      url: API_URL   'addnew',
      data: data,
      headers: {
        'Content-Type': 'application/json; charset=utf-8',
        'Access-Control-Allow-Origin': '*',
        "Accept": "application/json"
      }
    })
      .then(response => {
        if (response.status === 200) {
          console.log('The status code is : '   response.status);
        }
      })
      .catch(err => {
        console.log('-------Failed to add new data. Error occurred.-------');
      });
  };
 

Серверная часть:

 // @route  POST api/items
// @desc   Create An Item
// @access Public 
router.post('/addnew', function(req, res) {
  const newItem = new Item({
    entryDate: req.body.entryDate,
    leaveDate: req.body.leaveDate
  });

  console.log(newItem);
  // save model to database
  newItem.save(function(err) {
    if (err) {
      res.json({
        success: false,
        message: 'failed to post data'
      })
    } else {
      res.json({
        success: true,
        message: 'success to post data'
      })
    }
  })
});
 

Я протестировал внутренний API с Postman, код состояния равен 200, но возвращает сообщение об ошибке, показанное ниже, как на скриншоте:

Скриншот Postman

Я не уверен, где я ошибся, я предполагаю, что данные схемы «Элемент» не могут быть сохранены в коллекции «элементы», но я понятия не имею, что мне делать.

Я буду очень признателен за каждую небольшую помощь. Заранее спасибо!

Ответ №1:

Попробуйте изменить так

 const Item = require('path/to/ItemSchemas');

// @route  POST api/items
// @desc   Create An Item
// @access Public 
router.post('/addnew', function(req, res) {
  const newItem = new Item({
    entryDate: req.body.entryDate,
    leaveDate: req.body.leaveDate
  });

  console.log(newItem);
  // save model to database. Since newItem hasn't been added to the db, we used Item.save instead
  Item.save(newItem, function(err) {
    if (err) {
      // save to db failed!
      res.status(500).json({
        success: false,
        message: err
      })
    } else {
      res.json({
        success: true,
        message: 'success to post data'
      })
    }
  })
});
 

Комментарии:

1. Спасибо за вашу помощь! Я попробовал этот код, но при тестировании с Postman я получил «500 — внутренняя ошибка сервера». Поскольку я создал две коллекции «элементы» и «пользователи» для 2 схем соответственно, будет ли это автоматически сохранять данные в коллекции «элементы» или мне нужно указать в коде?

2. Ах, я этого не понял, извините, я быстро прочитал ваш пост. Поскольку вы создаете свой экземпляр с помощью элемента constructir const newItem = new Item.... Вы не должны использовать User.save но Item.save . Кроме того, вы должны добавить некоторый журнал в свое соединение, чтобы убедиться, что вы подключаетесь к своему экземпляру mongo без каких-либо ошибок