Массив дат, созданный с помощью средства выбора даты реакции, отправляет неверную дату начала в MongoDB - PullRequest
0 голосов
/ 30 марта 2020

Я пытаюсь отправить массив дат в мою MongoDB. Все выглядит хорошо, когда я регистрирую массив дат и newDateObject, который фактически публикуется в базе данных. datesLogging

Но в mongoDb первая дата в массиве фактически является последней датой. datesInMongo

Я понятия не имею, почему это так, и мне не повезло в поиске в Google.

Мой код ниже

import React  from 'react';
import DatePicker from "react-datepicker";
import "react-datepicker/dist/react-datepicker.css";
import 'react-datepicker/dist/react-datepicker-cssmodules.css';
import moment from 'moment';
import axios from 'axios';

export default class ScheduleTemplate extends React.Component {
    constructor (props) {
        super(props)

        this.state = {
          startDate: '',
          endDate: ''
        };

      }

      handleStartDateChange = date => {
        this.setState({
          startDate: date,
        });

       console.log(this.state);
      }

      handleEndDateChange = date => {
        this.setState({
          endDate: date
        });

      }  

      getDates = (start, end) => {

        const startDate = moment(moment(start).format('YYYY-MM-DD'));
        const endDate = moment(moment(end).format('YYYY-MM-DD'));
        const datesBetween = [];

        let startingMoment = startDate;
        datesBetween.push(startingMoment);

        while(startingMoment < endDate) {

            let newDate = moment(moment(startDate).add(1, 'd').format('YYYY-MM-DD'));

            moment(startingMoment.add(1, 'd').format('YYYY-MM-DD'));
            datesBetween.push(newDate);

        }       

        return datesBetween;

      }

      onFormSubmit = e => {
        e.preventDefault();

        const dates = this.getDates(this.state.startDate, this.state.endDate);

        console.log(dates);

        const newDatesObject = {
          dates: dates
        }

        console.log(newDatesObject);

        axios.post('http://localhost:5000/dates/add', newDatesObject)
          .then(res => console.log(res.data));
             this.setState({
                 startDate: '',
                 endDate: ''
             });

      }

      render() {
        return (
          <form onSubmit={ this.onFormSubmit } autoComplete="off">
            <div className="form-group">
            <h6>Start Date</h6>
              <DatePicker
                  selected={ this.state.startDate }
                  onChange={ this.handleStartDateChange }
                  name="startDate"
                  dateFormat="yyyy/MM/dd"
              />

            </div>
            <div className="form-group">
            <h6>End Date</h6>
              <DatePicker
                  selected={ this.state.endDate }
                  onChange={ this.handleEndDateChange }
                  name="endDate"
                  dateFormat="yyyy/MM/dd"
              />
            </div>
            <button className="btn btn-primary" type='submit'>Post Dates</button><br/>
          </form>
        );
    }

}

Модель

const mongoose = require('mongoose');

const Schema = mongoose.Schema;

const datesSchema = new Schema({
  dates: [{ type: Date, required: true }],
}, {
  timestamps: true,
});

const Dates = mongoose.model('Dates', datesSchema);

module.exports = Dates;

Маршрут

const router = require('express').Router();
let Dates = require('../models/dates.model');


router.post('/add', async (req, res) => {
    try {
        const { dates } = await req.body;

        const newDates = new Dates({
            dates
        });

        await newDates.save()
        res.json('Dates added!')

      } catch(err) {  
          console.error(err.message);
          res.status(500).json('Server Error');
   }
});


router.get('/', async (req, res) => {
    try {
     const dates = await Dates.find();

     res.json(dates);

    } catch(err) {
        console.error(err.message);
        res.send(400).send('Server Error');
    }
});
...