Как добавить оператор ejs if, когда пользователь следует за пользователем, кнопка отмены подписки будет показана наоборот - PullRequest
0 голосов
/ 13 января 2019

У меня есть этот маршрут для подписчиков. Используя req.params.id, все работает хорошо и смог передать запрашиваемый идентификатор пользователя пользователю.

проблема теперь в моем EJS, где, если за пользователем следят, и появляется кнопка отмены подписки, но кнопка отслеживания все еще отображается. Есть ли способ, что, если я откажусь от пользователя, будет отображена кнопка «Подписаться»?

это мой код

router.get('/follow/:id', isLoggedIn, async function(req, res) {
try {
let user = await User.findById(req.params.id)
if(req.user.id ===  req.params.id) {
req.flash('error', 'You cannot add yourself') 
res.redirect('back')
} else {
 user.followers.addToSet({_id: req.user._id} );
 user.save();

 req.flash('success', 'Successfully followed ' + user.local.username + 
'!');
  res.redirect('back');
}   

} catch(err) {
req.flash('error','Author is already added');
res.redirect('back');
}
});

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


let user = await User.findByIdAndUpdate(req.params.id);

  user.followers.pull(req.user.id);
  user.save();
  req.flash('success', 'Successfully unfollowed ' + user.local.username + 
'!');
  res.redirect('back');

 } catch(err) {
req.flash('error', err.message);
res.redirect('back');
 }

});

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

const mongoose = require('mongoose');
const bcrypt = require('bcryptjs');
const Schema = mongoose.Schema;
const Service = require('../models/services')
const Review = require('../models/review')

// Create a schema
const userSchema = new Schema({

local: {
email: {
  type: String,
  lowercase: true,
  unique: true,
},
password: { 
  type: String,
  require: true
},

notifications: [
{
 type: mongoose.Schema.Types.ObjectId,
 ref: 'Notification'
 }
],

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

Профиль .ejs

<% layout('./layouts/boilerplate') -%>



<div class="container-fluid profilecard">
    <div class="profile-card">
            <div class="image-container">
            <div class="img-thumbnail">
                <img class="img-fluid" src="<%= user.local.images.url %>" 
style= "width: 100%;">
            </div>
 <div class="title">
  <p><h2 class="text-center"> <%=user.local.username %> 
<%=user.facebook.name %></h2></p> 
   </div>
   </div>
   <div class="follow justify-content-center">
 <a href="/users/follow/<%= user.id %>"><button class="btn btn- 
primary">Follow <%= user.local.username %></button></a>
     <% 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">Unfollow</button>
   </form>
    <% }  %>   
  <% }) %>
  </div>

Я пытался добавить еще <% = currentUser._id! == follower._id, это не работает </p>

Нужен совет здесь

1 Ответ

0 голосов
/ 20 февраля 2019

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

User.findById(req.params.id).populate("followers").exec(function(err, foundUser)

После этого в моем шаблоне я перебираю список подписчиков, чтобы проверить, совпадает ли идентификатор. Если есть идентификатор, логическое значение изменяется.

<% var isFollowing = false;
                                    user.followers.forEach(function(follower) {
                                    if(currentUser && follower._id.equals(currentUser._id)) {
                                        isFollowing = true;
                                        return false;
                                     } 
                                }); 
                                if( isFollowing ) { %>
                                    <div class="Button-Collection">
                                        <a href="/profile/<%= user.id %>/unfollow" class="Button Remove" title="Follow <%= user.firstName %>">Unfollow</a>
                                    </div>
                              <% } else { %>
                                    <div class="Button-Collection">
                                        <a href="/profile/<%= user.id %>/follow" class="Button Add" title="Follow <%= user.firstName %>">Follow</a>
                                    </div>
                                <% } %>

Надеюсь, это сработает для вас: -)

...