идентификатор пользователя не совпадает с идентификатором записи пользователя

#javascript #mongodb #handlebars.js #handlebarshelper

#javascript #mongodb #handlebars.js #handlebarshelper

Вопрос:

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

 editIcon: function (user, loggedUser, floating = true) {
console.log(user, loggedUser);
if (user._id.toString() == loggedUser._id.toString()) {
  if (floating) {
    return `<div>edit icon</div>`;
  }
} else {
  return '';
}
  

},

В основном пользователь — это user._id. loggedUser — это идентификатор внутри сообщения, и он совпадает с идентификатором пользователя.

Вот как выглядит мой руль:

   {{#each posts}}
    <div class="post-extra">
      <div class="card-image">
        <!-- User is the logged in user and then post id (_id) -->
        {{{editIcon user _id}}}
      </div>
      <a href="#" class="user-link">{{user.username}}</a>
      <h2>{{postTitle}}</h2>
    </div>
  {{else}}
  <p>No posts to display</p>
  {{/each}}
</div>
  

Проблема в том, что когда я консольный журнал user и loggedUser, возвращаемые идентификаторы отличаются. Однако в моем mongodb идентификатор пользователя и идентификатор пользователя внутри сообщения совпадают.

Мои объекты post и user:

Публикация:

 _id:ObjectId("5f8523d8b58f4919908e3895") <-- this is being returned..
postTitle:"Test post"
postBody:"<div>stuff</div>"
user:ObjectId("5f8522c9c0ec222ea4b7c8c0") <-- instead of this
createdAt:2020-10-13T03:49:44.333 00:00
__v:0
  

Пользователь:

   _id: ObjectId("5f8522c9c0ec222ea4b7c8c0"), // User id 
  username: 'test',
  email: 'test@gmail.com',
  password: 'hashed password here',
  createdAt: 2020-10-13T03:45:13.018Z,
  __v: 0
  

Комментарии:

1. Почему user передается editIcon дважды в {{{editIcon user user _id}}} ?

2. @76484 Опечатка. Просто исправил это сейчас. Все в сообщении по-прежнему применяется, хотя и остается тем же самым.

3. Какие id значения регистрируются и какие значения вы ожидаете.

4. @76484 пользователь. _id регистрирует весь пользовательский объект, включая идентификатор. Зарегистрированный пользователь регистрирует идентификатор записи. В моем сообщении у меня есть пользователь с идентификатором пользователя. Я хочу посмотреть, является ли пользователь. _id соответствует идентификатору пользователя внутри сообщения, если он есть, то рядом с этим сообщением отображается значок редактирования.

5. Я не понимаю, как user._id можно было бы хранить весь пользовательский объект. Но похоже _id , что аргументом для помощника является идентификатор записи. Вы должны иметь возможность передать свойство Post user помощнику и получить от него идентификатор. Возможно, если бы вы опубликовали данные — объекты Post и User — вы смогли бы получить более конкретную помощь.

Ответ №1:

Поскольку вы вызываете своего editIcon помощника as {{{editIcon user _id}}} , вы передаете user из post и _id из post . Это неверно, потому что вы хотите сравнить user сообщение с user запросом (вошедшим в user систему).

Из приведенного вами примера неясно, есть ли у вас доступ к user запросу в вашем шаблоне. Если вы это сделаете, он, безусловно, не будет вложен в post объект, поэтому вам понадобится путь для расширения контекста или двух для доступа к нему. Результат будет выглядеть примерно так:

 {{{editIcon user ../user}}}
  

В этом примере вошедший в user систему является родственным элементом posts массива, но ваша структура данных может отличаться.

Я создал скрипку для вашей справки.

Комментарии:

1. Сначала я хочу поблагодарить вас за то, что вы потратили столько времени на мою проблему. Итак, я просмотрел предоставленную скрипку, и моя структура данных такая же, как в примере. Однако, когда я добавляю. _id для зарегистрированного пользователя становится неопределенным. Я заполняю страницу пользователями и имею ` user: { // Подключает пользователя к типам сообщений: mongoose. Схема. Типы. ObjectId, ссылка: ‘LocalUser’, },` в моей схеме сообщений. Я действительно чувствую, что перепробовал все.

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