Как получить идентификатор пользователя, вошедшего в систему, при создании запроса для этого пользователя без использования req.params.id? - PullRequest
0 голосов
/ 15 мая 2019

Допустим, у меня есть API с конечной точкой / posts.Каждый пост в моей схеме Mongoose содержит ссылку на пользователя, который его создал, а каждый пользователь имеет массив ссылок на созданные им посты.

При публикации в качестве зарегистрированного пользователя, чтобы сохранить эту ссылку, мне нужно отправить текущий зарегистрированный идентификатор пользователя вместе с содержимым сообщения в конечную точку / posts.Я бы предпочел не делать это через какой-то вложенный запрос, например / users /: id / posts, а затем отправить req.params.id.Я хотел бы публиковать сообщения непосредственно в / posts, но как-то отправлять user.id в запросе.

Модель пользователя:

const UserSchema = new Schema({
  name: {
    type: String,
    required: true
  },
  email: {
    type: String,
    required: true,
    unique: true
  },
  password: {
    type: String,
    required: true
  },
  posts: [{
    type: mongoose.Schema.Types.ObjectId,
    ref: 'Post'
  }]
});

Модель сообщений:

const PostSchema = new Schema({
  content: {
    type: String,
    required: true
  },
  created: {
    type: Date,
    default: Date.now
  },
  user: {
    type: mongoose.Schema.Types.ObjectId,
    ref: 'User'
  }
});

Создать новое сообщение (нужен способ получить идентификатор пользователя, поскольку в действительности его не будет в req.params)

exports.createPost = async function(req, res, next) {
  try {
    const { content } = req.body; // ideally would get user ID from here
    const post = await db.Post.create({
      content,
      user: req.params.id
    });
    const postUser = await db.User.findById(req.params.id);
    postUser.posts.push(post.id);
    await postUser.save();
    const newPost = await db.Post.findById(post.id); 
    const {id, created} = newPost;
    return res.status(201).json({
      id,
      content,
      created
    })
  }
  catch(err) {
    return next(err);
  }
}

Я знаю, что, возможно, упускаю что-то очевидное, но я ценю любые предложения.

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