gpt4 book ai didi

node.js - Nodejs、Mongodb 关注/取消关注请求

转载 作者:太空宇宙 更新时间:2023-11-03 23:17:56 25 4
gpt4 key购买 nike

我正在制作一个社交网络应用程序,用户可以在其中互相关注并拥有关注者和关注选项。我编码了关注的所有逻辑,但问题是一个用户可以一次又一次地关注同一个用户,但我希望一个用户只能关注其他用户一次,但不能超过这个次数,该怎么办?下面是我的代码。

用户架构

const mongoose = require('mongoose');
const Schema = mongoose.Schema;

var UserSchema = new Schema({
name:{
type:String,
required:true
},
email:{
type:String,
required:true
},
password:{
type:String,
required:true
},
avatar:{
type:String,
},
following: [
{
type: Schema.ObjectId,
ref: 'User'
},

],
followers: [
{
type: Schema.ObjectId,
ref: 'User'
}
],
date:{
type:Date,
default: Date.now
},
});

module.exports = mongoose.model("User", UserSchema);

用户路由器

router.post("/user/:user_id/follow-user",  passport.authenticate("jwt", { session:false}), (req,res) => {
User.findById(req.params.user_id)
.then(user => {
user.followers.push(req.user._id);
var followedUser = user._id;
user.save()
User.findOne({ email: req.user.email })
.then(user => {
user.following.push(followedUser);
user.save().then(user => res.json(user))
})
.catch(err => console.log(err))
})
})

最佳答案

最后,在尝试了很多方法之后,我自己解决了这个问题,并且我还更改了我的 UserSchema 来解决这个问题,下面是我的代码。我还添加了一个方法,这样用户就无法关注自己。

用户架构

const mongoose = require('mongoose');
const Schema = mongoose.Schema;

var UserSchema = new Schema({
name:{
type:String,
required:true
},
email:{
type:String,
required:true
},
password:{
type:String,
required:true
},
avatar:{
type:String,
},
following: [
{
user:{
type: Schema.ObjectId,
ref: 'User'
},
}

],
followers: [
{
user:{
type: Schema.ObjectId,
ref: 'User'
},
}
],
date:{
type:Date,
default: Date.now
},
});

module.exports = mongoose.model("User", UserSchema);

user.js

router.post("/user/:user_id/follow-user",  passport.authenticate("jwt", { session:false}), (req,res) => {

// check if the requested user and :user_id is same if same then

if (req.user.id === req.params.user_id) {
return res.status(400).json({ alreadyfollow : "You cannot follow yourself"})
}

User.findById(req.params.user_id)
.then(user => {

// check if the requested user is already in follower list of other user then

if(user.followers.filter(follower =>
follower.user.toString() === req.user.id ).length > 0){
return res.status(400).json({ alreadyfollow : "You already followed the user"})
}

user.followers.unshift({user:req.user.id});
user.save()
User.findOne({ email: req.user.email })
.then(user => {
user.following.unshift({user:req.params.user_id});
user.save().then(user => res.json(user))
})
.catch(err => res.status(404).json({alradyfollow:"you already followed the user"}))
})
})

关于node.js - Nodejs、Mongodb 关注/取消关注请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53069041/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com