помощник экспресс-руля не работает должным образом - PullRequest
0 голосов
/ 08 июля 2019

В приложении для работы с нодами / экспресс-блогами, над которым я работаю, я использую пакет экспресс-рулей для шаблонов.

Моя проблема связана с помощником, которого я создал, чтобы определить, следует ли пользователь уже за блогом другого пользователя или нет. При посещении пользователем блога пользователя userB этот помощник должен запустить и просмотреть циклы последователей userB (массив идентификаторов #), чтобы узнать, находится ли идентификатор пользователя в массиве. Если это так, появляется напоминание о том, что пользователь A уже подписан на этот блог; если нет, то есть кнопка, которая приглашает их следовать за блогом.

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

Вот код. Во-первых, вот файл вида руля. Первая проверка {{#if user}} проверяет, действительно ли пользователь вошел в систему, и это происходит из passportjs. Вторая проверка определяет, находится ли вошедший в систему пользователь в своем блоге или блоге другого пользователя. Если это их собственный блог, то, очевидно, вопрос о следующем не имеет значения. Третий чек - это то, что нас интересует:

{{#if user}}
    {{#unequal account.username user.username account}}
            {{#following acc.followers ../user._id acc}}
            <div class="d-flex justify-content-around mt-2">
                <p id='alreadyFollowing' class="bg-primary text-white px-4 py-2 br-4">You are following {{../acc.username}}</p>
            </div>
            {{else}}
            <div class="d-flex justify-content-around mt-2">
                <form action="/account/addfan/{{../acc.username}}" method="post">
                    <button type="submit" id="fan" class="text-white btn bg-primary p-2"><i class="fa fa-users fa-lg">&nbsp; </i>Follow {{../acc.username}}</button>
                </form>
            </div>
            {{/following}}                
    {{/unequal}}
{{/if}}

Помощник {{#following}} выполняет проверку: «acc.followers» ссылается на массив идентификаторов подписчиков посещенного блога (или аккаунта), user._id ссылается на идентификатор посещающего пользователя. Если он возвращает true, то напоминание отображается; если нет, кнопка отображается.

Вот файл app.js, в котором я определил и зарегистрировал помощников:

app.engine('handlebars', exhbs({    
defaultLayout: 'blogview',
helpers: {

    unequal: (v1, v2, v3, options) => {
        if(v1 !== v2) { return options.fn({name1: v1, name2: v2, acc: v3}); }
        return options.inverse(this);
    },


    following: (arr, ID, acc, options) => {
        for(let i = 0; i < arr.length; i++) {
            console.log(arr[i]+' '+ID);
            if (arr[i]['_id'] === ID) { return options.fn({arr:arr, ID:ID, acc:acc}); }
            break;
        }
        return options.inverse(this);
    }
}    
}));

app.set('view engine', 'handlebars');

Если следует указать, что помощник {{#unequal}} работает отлично и как ожидалось. Помощник {{#following}} - это тот, который не работает. Я запускаю console.log, чтобы убедиться, что все данные присутствуют, и это так. Ниже приведен пример того, что я получаю с двух демо-счетов, хранящихся в mongoose / mongodb:

{ _id: 5d181b52a8b40944b8d616ba } 5d181b52a8b40944b8d616ba
{ _id: 5d181b61a8b40944b8d616bc } 5d181b52a8b40944b8d616ba
{ _id: 5d196001494f7f155cf00901 } 5d181b52a8b40944b8d616ba
{ _id: 5d195fe8494f7f155cf008ff } 5d181b52a8b40944b8d616ba

Так что в этом случае у userB есть четыре подписчика. При каждом проходе по массиву у нас есть журнал идентификаторов тех, кто следует за userB, а затем идентификатор посещающего пользователя userA. Как видите, идентификатор пользователя А находится в позиции 0 этого массива, и я думаю, что он должен вернуть true и отобразить сообщение-напоминание.

Но, опять же, этого не происходит. Этот помощник возвращает false и отображает кнопку, приглашая подписчиков, даже если userA уже подписан.

В чем здесь проблема? Что-то мне не хватает в помощниках в экспресс-руле? Или я сделал какую-то глупую ошибку с Javascript?

Любая помощь будет принята с благодарностью. Заранее спасибо

...