Почему поле secondUser влияет на работу findOne? - PullRequest
0 голосов
/ 15 марта 2019

В этом я использую nodejs с экспрессом и мангустом. Мой вопрос: как изменение поля secondUser влияет на работу findOne или нет? Если у меня есть это как friends.id, он работает и находит нужный профиль, но я хочу привязать его к пользовательскому полю в профиле. Если я изменяю его на friends.user.id, findOne завершается ошибкой, и он посылает ошибку 404 в подвохе.

router.post(
  "/:handle",
  passport.authenticate("jwt", {
    session: false
  }),
  (req, res) => {
    Profile.findOne({ handle: req.params.handle }).then(friends => {
      const newFriend = new Friend({
        initialAccepted: true,
        initialUser: req.user.id,
        secondaryUser: friends.id
      });

      newFriend
        .save()
        .then(Friend => res.json(Friend))
        .catch(err =>
          res.status(404).json({
            friendnotfound: "No people found with that handle"
          })
        );
    });
  }
);

Используемая для друга схема:

const FriendSchema = new Schema({
  initialUser: {
    type: Schema.Types.ObjectId,
    ref: "profile"
  },

  secondaryUser: {
    type: Schema.Types.ObjectId,
    ref: "profile"
  },

  initialAccepted: {
    type: Boolean,
    default: false
  },

  initialSecondary: {
    type: Boolean,
    default: false
  },

  date: {
    type: Date,
    default: Date.now()
  }
});

Это схема для профиля

const ProfileSchema = new Schema({
  user: {
    type: Schema.Types.ObjectId,
    ref: "users"
  },
  handle: {
    type: String,
    required: true,
    max: 40
  },
  bio: {
    type: String
  },
  platforms: {
    type: [String]
  },
  website: {
    type: String
  },

  social: {
    youtube: {
      type: String
    },
    twitter: {
      type: String
    },
    facebook: {
      type: String
    },
    linkedin: {
      type: String
    },
    twitch: {
      type: String
    }
  },

  games: [
    {
      name: {
        type: String
      },
      platform: {
        type: String
      },
      handle: {
        type: String
      },
      rank: {
        type: String
      }
    }
  ],

  date: {
    type: Date,
    default: Date.now
  }
});

1 Ответ

0 голосов
/ 15 марта 2019

Соблюдайте правила именования переменных

Profile.findOne({ handle: req.params.handle }).then(profile => { // changed name from friends to profile
    const newFriend = new Friend({
        initialAccepted: true,
        initialUser: req.user.id,
        secondaryUser: profile.id // changed name from friends to profile
        // profile.user.id (ref to user table not provided in schema)
    });

если вы передадите profile.user.id, объект не будет создан (проверяется идентификатор внутри схемы профиля, но предоставляется идентификатор пользователя)

Схема друга:

 secondaryUser: {
        type: Schema.Types.ObjectId,
        ref: "profile" // checking for id inside profile schema
      },
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...