Невозможно указать автора в стеке сообщений блога MERN с помощью JWT

Я пытаюсь создать сайт блога, используя стек MERN и JWT для аутентификации.

Моя модель пользователя выглядит так:

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

const UserSchema = Schema({
  name: String,
  username: String,
  password: String,
  posts: [{ type: Schema.Types.ObjectId, ref: "Blog" }]
});

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

Модель My Blog выглядит так:

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

const BlogSchema = Schema({
  title: String,
  content: String,
  date: { type: Date, default: Date.now },
  author: { type: Schema.Types.ObjectId, ref: "Blog" }
});

module.exports = mongoose.model("Blog", BlogSchema);

Я использую JWT для аутентификации Создать новый маршрут блога. При входе в систему я отправляю клиенту токен JWT с идентификатором и именем текущего пользователя в качестве полезной нагрузки. Если токен, отправленный из интерфейса реакции, действителен, я добавляю идентификатор пользователя в объект req при проверке JWT. Т.е. объект req будет иметь поле user_id вместе с заголовками, телом и другими

Маршрут создания новой публикации выглядит так:

blog.post("/", authenticateUsingJwt, (req, res) => {
  // Validating the req.body object
  const newPost = new Blog({
    title: req.body.title,
    content: req.body.content,
    author: req.user_id
  });

  newPost.save();
});

Когда я использую свою оболочку mongodb и просматриваю свою коллекцию User, я вижу, что posts [] является пустым массивом. Как это исправить, чтобы можно было использовать заполнение?

User.findOne({ username: "existingUserInDatabase" })
  .populate("Blog")
  .then(user => res.send(user))
  .catch(err => console.log(err));

Этот код возвращает пользователя из БД, но сообщения [] - пустой массив.


person user10822859    schedule 02.02.2020    source источник


Ответы (1)


Вам нужно заполнять блоги вместо блога.

User.findOne({ username: "existingUserInDatabase" })
  .populate("blogs")  //not "Blog"
  .then(user => res.send(user))
  .catch(err => console.log(err));
person SuleymanSah    schedule 02.02.2020
comment
@ user10822859 вы проверили этот ответ? Пожалуйста, оставьте отзыв. - person SuleymanSah; 02.02.2020
comment
Извините за долгую задержку. Да, я это проверял. Мне пришлось заполнить имя поля. В моем случае это были посты. Спасибо - person user10822859; 11.03.2020