Как показать подписку / кнопки в ejs - PullRequest
0 голосов
/ 14 января 2019

Я пытаюсь создать страницу профиля пользователя, где пользователь может подписаться на другого пользователя. мои маршруты в порядке но потом я хотел бы спросить, если пользователь нажимает следовать. Будет показана только кнопка отмены подписки. если я откажусь от этого, будет показана следующая кнопка.

это мои коды

router.get('/follow/:id', isLoggedIn, async function(req, res, next) {
  try {
    const user = await User.findById(req.params.id);

     if (!user) {
      req.flash("error", "User does not exist");
      res.redirect('back')
      return res.status(404).json({ error: 'User does not exist' });

    }

  if (user.followers.indexOf(req.user.id) !== -1) {
    req.flash("error",`You're already following ${user.local.username}` )
    res.redirect('back')
    return res.status(400).json({ error: `You're already following 
${user.local.username}` });
  }

 user.followers.addToSet(req.user.id);
 await user.save();

const users = await User.findById(req.user.id);
users.following.addToSet(user.id);
await users.save();
req.flash("success", "User added")
return res.redirect('back')
 } catch (err) {
 return next(err);
}

});

router.delete('/follow/:id', isLoggedIn, async function(req, res) {
try {

const user = await User.findById(req.params.id);

  if (!user) {
    return res.status(404).json({ error: 'User not found' });
  }

  const following = user.followers.indexOf(req.user.id);
  if (following === -1) {
    return res.status(400).json({ error: `You're not following 
${user.username}` });
  }

  user.followers.splice(following, 1);
  await user.save();

  const userLogged = await User.findById(req.user.id);

  const positionUnfollow = userLogged.following.indexOf(user.id);
  userLogged.following.splice(positionUnfollow, 1);

  await userLogged.save();
  req.flash('success', `You have sucessfully unfollowed 
${user.local.username || user.facebook.name}`)
  return res.redirect("back");
} catch (err) {
  return next(err);
  }
 });

моя страничка ejs

 <div class="follow justify-content-center">
        <% user.followers.forEach(function(follower) { %>
        <% if(currentUser && currentUser._id.equals(follower.id)) { %>
        <form id="delete-btn" action="/users/follow/<%= user.id%>? 
 _method=DELETE" method="POST">
            <button class="btn btn-danger"><i class="fas fa-user-slash"> 
 </i></button>
        </form>
        <% } %>
        <%  }) %>
    </div>

     <% user.following.forEach(function(follow) { %>
     <% if(currentUser && follow._id !== user._id) {%>
      <a href="/users/follow/<%= user.id %>"><button class="btn btn- 
 primary"> 
  <i class="fas fa-user-plus"></i></button></a>
    <% } %>
    <%  }) %>



    <div class="card-footer text-center">
        <div class="social-media">
            <a href="#"><i class="fab fa-facebook"></i></a>
            <a href="#"><i class="fab fa-twitter-square"></i></a>
            <a href="#"><i class="fab fa-instagram"></i></a>
            </div>
        </div>
    </div>
</div>

моя пользовательская схема

followers: [
{ 
type: mongoose.Schema.ObjectId, ref: 'User' 
}
],
following: [
  { type: mongoose.Schema.ObjectId, ref: 'User' 
}
],

проблема теперь в том, что если я подписан на пользователя, появится кнопка отмены подписки, но кнопка отслеживания не исчезнет.

также, если я сделал <% = user._id%> и <% = follow.id%> значения одинаковы, но не уверен, почему переменные окружения не работали.

...