Невозможно сохранить созданные и обновленные значения в качестве значений даты и времени, ни бэкэнда, ни внешнего интерфейса. - PullRequest
1 голос
/ 20 января 2020

Я пытаюсь сохранить значения даты и времени в TodoForm, но эти значения не отражаются в базе данных. Это моя модель todo.

Todo. js

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

  const todoSchema = new Schema({
    name: String,
    description: String,
    isDone: Boolean,
    createdAt: Date,
    updatedAt: Date
    },
   {timestamps: {createdAt: 'created_at' updatedAt: 'updated_at'}}
    );

 mongoose.model('todos', todoSchema);

Затем следует мой маршрут публикации todosController.

TodosController:

  app.post('/api/todos', async (req, res) => {
      const { name, description, isDone, createdAt, updatedAt} = req.body;

      const todo = new Todo({
            name,
            description,
            isDone,
            createdAt,
            updatedAt
       });

     try {
        let newTodo = await todo.save();
        res.status(201).send(newTodo);
       } catch (err) {
          if (err.name === 'MongoError') {
             res.status(409).send(err.message);
              }
        res.status(500).send(err);
           }
         });

Это со стороны сервера. Следующий код - со стороны переднего конца.

TodoForm.jsx

   componentWillReceiveProps = nextProps => {
      // Load Contact Asynchronously
      const { todo } = nextProps;
      if (todo._id !== this.props.todo._id) {
       // Initialize form only once
       this.props.initialize(todo);
       this.isUpdating = true;
      }
    };


   render() {
        const { handleSubmit, loading } = this.props;

       if (loading) {
         return <span>Loading...</span>;
      }

           return (
        <form onSubmit={handleSubmit}>
    <Field
            name='createdAt'
            component={DateTimePickerInput}
            dateFormat='dd-MM-yyyy'
            // dateFormat='dd-MM-yyyy H:mm'
            // showTimeSelect
            timeFormat='HH:mm'
            placeholder=' todo createdAt...'
            label='CreatedAt'
          />
         <Field
            name='updatedAt'
            component={DateTimePickerInput}
            dateFormat='dd-MM-yyyy'
            // dateFormat='dd-MM-yyyy H:mm'
            // showTimeSelect
            timeFormat='HH:mm'
            placeholder='todo UpdatedAt...'
            label='UpdatedAt'
           />

     <Link className='btn btn-light mr-2' to='/todos'>
            Cancel
           </Link>
          <button className='btn btn-primary mr-2' type='submit'>
            {this.isUpdating ? 'Updating' : 'Create'}
          </button>
         </form>
       );
    }
  }

Ожидается вывод, например, когда я заполняю форму задачи и нажимаю кнопку отправки, это "2020-09-18N14: 00:30 ", отражено значение даты и времени в базе данных, но реальный вывод - пустые значения createAt и updatedAt: datetime.

Что не так?

Я вызываю свой API из NewTodo.jsx

  state = {
      redirect: false
    };

   componentDidMount() {
     this.props.newTodo();
    }

   submit = todo => {
      return this.props
        .saveTodo(todo)
        .then(response => this.setState({ redirect: true }))
        .catch(err => {
          throw new SubmissionError(this.props.errors);
        });
    };

1 Ответ

0 голосов
/ 20 января 2020

Шаг 1: преобразуйте свою дату в строку в вашей схеме

схема

 createdAt: String,
 updatedAt: String

вы можете напрямую хранить ваши данные, как вы передали в своем запросе на публикацию, если вы хотите преобразовать их затем в требуемый формат

Шаг 2: используйте момент, если вы хотите отформатировать дату в требуемом формате, затем установите момент

npm install moment

const { name, description, isDone, createdAt, updatedAt} = req.body;
  const todo = new Todo({
        name,
        description,
        isDone,
        createdAt : moment(createdAt).format('DD-MM-YYYY HH.mm') , //change it as per your requirement 
        updatedAt : moment(updatedAt).format('DD-MM-YYYY HH.mm') ,
   });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...