Добавление массива в понедельник go через AJAX Call и Mongoose - PullRequest
0 голосов
/ 20 марта 2020

Я пытаюсь обновить документ в базе данных mon go информацией из формы, когда вся форма входит в поле, являющееся массивом. В настоящее время я не могу заставить его обновить документ, только создать новый, но, что еще более важно, я не могу получить информацию из формы в массив.

Вот моя схема:

const mongoose = require("mongoose");

const Schema = mongoose.Schema;

const WorkoutSchema = new Schema({

    day: {
        type: Date,
        default: Date.now
    },
    exercises: [
        {
            type: String,
            trim: true,
            required: "Exercise type is required"
        },
        {
            name: String,
            trim: true,
            required: "Exercise name is required"
        },
        {
            duration: Number  
        },
        {
            weight: Number 
        },
        {
            reps: Number 
        },
        {

            sets: Number 
        },
        {
            duration: Number 
        },
        {
            distance: Number 
        }
    ]


  });

  const Workout = mongoose.model("Workout", WorkoutSchema);

  module.exports = Workout;

А вот мой маршрут API. Я включил результаты console.logs ниже, чтобы вы могли видеть информацию, которая передается.

app.put("/api/workouts/:id", (req, res) => {
  console.log("api body: " + JSON.stringify(req.body));
  console.log("body is " + typeof req.body);
  var body = JSON.stringify(req.body);

  // body = body.split("{")[1];
  // body = body.split("}")[0];
  // body = "["+body+"]";
  console.log(body);
  Workout.create({exercises: `${body}`})
    .then(Workout => {
      res.json(Workout);
    })
    .catch(err => {
      res.json(err);
    });
});

тело API: {"тип": "сопротивление", "имя": "пробный пресс", "вес": 100, "наборы": 5, "повторений": 6, "продолжительность" ": 10}

тело является объектом

{" тип ":" сопротивление "," имя ":" пробный пресс "," вес ": 100," наборы ": 5," повторений ": 6," продолжительность ": 10}

В базе данных я получаю упражнения в виде массива с одним элементом - вышеуказанным объектом - вместо серии пар ключ / значение. Я много чего пробовал, но это настолько близко, насколько я понимаю, что я пытаюсь сделать.

Кто-нибудь может увидеть, где я ошибся?

1 Ответ

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

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

const mongoose = require("mongoose");

const Schema = mongoose.Schema;

const WorkoutSchema = new Schema({

    day: {
        type: Date,
        default: Date.now
    },
    exercises: [{
        type: {
            type: String,
            trim: true,
            required: "Exercise type is required"
        },
        name: {
            type: String,
            trim: true,
            required: "Exercise name is required"
        },
        duration: {
            type: Number,
            required: "Duration is required"  
        },
        weight: {
            type: Number 
        },
        reps: {
            type: Number 
        },
        sets: {
            type: Number 
        },
        distance: {
            type: Number 
        }
    }]


  });

  const Workout = mongoose.model("Workout", WorkoutSchema);

  module.exports = Workout;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...