Как добавить новый объект в пустой массив, который я включил в свою модель профиля (mongodb / mongoose)

#javascript #node.js #mongodb #express #mongoose

#javascript #node.js #mongodb #экспресс #мангуст

Вопрос:

Вот моя модель профиля,

 const ProfileSchema = new mongoose.Schema({
  user: {
    type: mongoose.Schema.Types.ObjectId,
    ref: "User",
  },
  company: String,
  website: String,
  location: String,
  status: {
    type: String,
    required: true,
  },
  skills: {
    type: [String],
    required: true,
  },
  bio: String,
  githubusername: String,
  experience: [
    {
      title: {
        type: String,
        required: true,
      },
      company: {
        type: String,
        required: true,
      },
      location: String,
      from: {
        type: Date,
        required: true,
      },
      to: Date,
      current: {
        type: Boolean,
        default: false,
      },
      description: String,
    },
  ],
  education: [
    {
      school: {
        type: String,
        required: true,
      },
      degree: {
        type: String,
        required: true,
      },
      fieldofstudy: {
        type: String,
        required: true,
      },
      from: {
        type: Date,
        required: true,
      },
      to: Date,
      current: {
        type: Boolean,
        default: false,
      },
      description: String,
    },
  ],
  social: {
    youtube: {
      type: String,
    },
    twitter: {
      type: String,
    },
    facebook: {
      type: String,
    },
    linkedin: {
      type: String,
    },
    instagram: {
      type: String,
    },
  },
  date: {
    type: Date,
    default: Date.now,
  },
  posts: [],
});

  

И вот как я добавляю новое сообщение,

 router.post(
  "/",
  [auth, [check("text", "Text is required").not().isEmpty()]],
  async (req, res) => {
    const errors = validationResult(req);
    if (!errors.isEmpty()) {
      return res.status(400).json({ errors: errors.array() });
    }

    try {
      const user = await User.findById(req.user.id).select("-password");

      let profile = await Profile.findOne({ user: req.user.id });
      if (profile) {

        const newPost = new Post({
          text: req.body.text,
          name: user.name,
          avatar: user.avatar,
          user: req.user.id,
        });

        const post = await newPost.save();
        profile.posts.unshift(post);
        res.json(post);
      }
    } catch (err) {
      console.error(err.message);
      res.status(500).json({ errors: [{ msg: "Server Error" }] });
    }
  }
);

  

Большинство из них работают без каких-либо проблем, я могу добавить новое сообщение без каких-либо ошибок, но сообщение не добавляется в массив сообщений в моих профилях. Конечный результат, который я хочу, — вести учет сообщений пользователя, чтобы я мог показывать их по отдельности в его профиле. Почему это не работает? Пожалуйста, помогите мне! Я новичок в веб-разработке, и я так смущен этим. Заранее спасибо.

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

1. вы еще не сохранили профиль

2. Нет, я имею в виду, если у меня есть существующая учетная запись, к которой я могу получить доступ.

3. Я нашел свою ошибку, большое вам спасибо. Ошибка новичка, лол.

Ответ №1:

из вашего вопроса я понял, что вы хотите добавить сообщение в схему профиля.

 const post = await newPost.save();
profile.posts.unshift(post);
await profile.save();
res.json(post);
  

Вам тоже нужно вызвать save, вы это пропустили. Теперь публикация будет помещена в коллекцию профилей в поле сообщения.

Ответ №2:

Первый шаг — проверить ваше промежуточное ПО аутентификации, если вы получаете параметры токена, второй — проверить, действителен ли этот токен. последнее — проверить вашу логику «router.post».

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

1. Я обнаружил проблемы, пока я сохраняю сообщение, я фактически не сохраняю обновленный профиль. Спасибо за вашу помощь!