为什么secondaryUser字段会影响findOne的工作原理?

问题描述 投票:0回答:1

在这里我使用带有express和mongoose的nodejs。我的问题是如何更改secondaryUser字段会影响findOne是否有效?如果我有它作为friends.id它工作,它找到正确的配置文件,但我想将它绑定到配置文件中的用户字段。如果我将其更改为friends.user.id,则findOne会失败并在catch中发送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
  }
});
node.js express mongoose
1个回答
0
投票

遵循适当的变量命名约定

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这个对象将不会被创建(检查配置文件模式中的id但是提供了用户ID)

朋友架构:

 secondaryUser: {
        type: Schema.Types.ObjectId,
        ref: "profile" // checking for id inside profile schema
      },
© www.soinside.com 2019 - 2024. All rights reserved.