При нажатии кнопки «Следить за пользователем» (в компоненте Frienddetail) вызывается функция addPeopleFollow. С помощью этой функции я хочу сохранить идентификатор пользователя, которого щелкнули (того, за которым вы пытаетесь следовать) в свойстве Friends Array пользователя, который вошел в мою базу данных / щелкнул мышью.
В моей базе данных есть Коллекция пользователей со всеми пользователями для каждого пользователя это:
_id:5eff397b70d78284c8c45186
friends:Array
username:"charlestryingout"
password:"$2b$10$CYMyPx10gk0jO5XoazcrSO32Ng37qoyU6uXkkeaswQ5KWm7k7ooym"
__v:0
Например: если пользователь с id = 5eff397b70d78284c8c45186 нажимает на другого пользователя с id = 5eff397b70d78284c8c45187, то я хотел бы получить это в результате в моей базе данных:
_id:5eff397b70d78284c8c45186
friends:Array[5eff397b70d78284c8c45187]
username:"charlestryingout"
password:"$2b$10$CYMyPx10gk0jO5XoazcrSO32Ng37qoyU6uXkkeaswQ5KWm7k7ooym"
__v:0
Я закодировал содержимое функции addPeopleFollow (ax ios request) и мне удалось заставить ее работать (я вижу console.logs в. затем в моей консоли ). Не стесняйтесь предлагать изменения, если считаете, что они неполные.
Мой вопрос:
Может ли кто-нибудь помочь мне в написании бэкэнда (первая версия ниже)? Сначала мне нужно будет найти в моем списке пользователей пользователя, который в настоящее время вошел в систему (с помощью функции getUser это должно работать). Когда этот конкретный пользователь c будет найден, мне придется добавить идентификатор в его свойство массива друзей. Моей первой идеей было бы .findByIdAndUpdate ({_ id: iduser}), но тогда я не знаю, как вставить sh идентификатор в существующий массив друзей (часть обновления).
Не могли бы вы написать полный код (подумайте только о бэкэнде, но не стесняйтесь предлагать изменения и во внешнем интерфейсе. Я использую Node / Mongoose / MongoDB / React
Front-end React
addPeopleFollow(idpeopleyoufollow){
Axios({
method: "POST",
url: `${process.env.REACT_APP_API_BASE}/friends`,
data: qs.stringify(idpeopleyoufollow),
headers: {"content-type": "application/x-www-form-urlencoded"},
withCredentials: true
})
.then(() => {
console.log("charles")
console.log(idpeopleyoufollow)
console.log("charles")
})
.catch((error) => {
console.log(error.response)
})
}
render() {
return (
<DefaultLayout>
<div className="friendsoverviewcontainer">
<h1>Our community ({this.state.friends.length} registered users)</h1>
<form className="friends">
<div className="titlepart">
<label className="friendlabel" htmlFor="friend">Search for Users :</label><br></br>
<input className="friendform" type="text" name="friend" value={this.state.friend} placeholder="Type a username here!" onChange={this.searchFriends}></input>
</div>
</form>
<div className="friendsboxes" >
{
this.state.searchFriends.map(friend =>
<div key={friend._id}>
<Frienddetail
key={friend._id}
id={friend._id}
username={friend.username}
location={friend.location}
innerCircle={this.addToInnerCircle}
peopleFollow={this.addPeopleFollow}
/>
</div>
)
}
</div>
</div>
Спецификация c Компонент Frienddetail
import React from 'react'
import './Frienddetail.css'
class Frienddetail extends React.Component {
constructor() {
super()
this.state = {
}
}
render() {
return (
<div className="friendbox">
<img className="imagedaredevilspicdetail" src="/images/profileimage.png" alt="picturesetting" />
<p className="friend">{this.props.username}</p>
<p className="friend">{this.props.location}</p>
<button className="followbutton" onClick={(e) => this.props.peopleFollow(this.props.id)}>Follow user!</button>
<button className="friendbutton" onClick={(e)=> this.props.innerCircle(this.props.id)}>Add to inner circle!</button>
</div>
)
}
}
export default Frienddetail
модель пользователя
const mongoose = require("mongoose")
const Schema = mongoose.Schema;
const userSchema = new Schema({
username: String,
password: String,
location: String,
imageUrl: String,
friends: [String],
error: String
})
const User = mongoose.model("users",userSchema)
module.exports = User;
Бэкэнд
// add peopleYouFollow
router.post("/friends", (req,res) => {
console.log("thisishappening")
let iduser = getUser()._id
User
.findByIdAndUpdate({_id:iduser})
.then((response) => {
res.json(response)
console.log("thisishappening")
})
.catch(error => {
res.json(error)
})
})