#node.js #reactjs #mongodb #redux
#node.js #реагирует на #mongodb #возвращение
Вопрос:
Я создаю приложение для блога. Я пытаюсь получить доступ к каждой детали поста. В модели я добавил пользователя, как mongoose.Schema.Types.ObjectId
с ref: 'User'
. В интерфейсной части я использую react с redux, в то время console.log
как подробности поста показывают мне все, даже user_id
то, но я не могу получить доступ к пользовательским объектам, таким как имя и т. Д. Пожалуйста, проверьте этот код, чтобы сказать мне, где я делаю что-то не так.
Пожалуйста, если вам нужны какие-либо другие подробности, пожалуйста, прокомментируйте.
СТРАНИЦА ПРОСМОТРА ОДНОЙ ЗАПИСИ
import { useEffect } from 'react'; import { Col, Container, Row } from 'react-bootstrap'; import { useDispatch, useSelector } from 'react-redux'; import { ToastContainer } from 'react-toastify'; import { listPostDetails } from '../actions/postActions'; import Category from '../components/Category'; const SinglePost = ({ match }) =gt; { const postId = match.params.id; const dispatch = useDispatch(); const postDetails = useSelector((state) =gt; state.postDetails); const { post } = postDetails; console.log(post); useEffect(() =gt; { dispatch(listPostDetails(postId)); }, [dispatch, postId]); return ( lt;div className="pt-5 pb-3"gt; lt;ToastContainer /gt; lt;Containergt; lt;Rowgt; lt;Col xs={12} sm={12} md={12}gt; lt;img src={post?.img} alt={`${post?.title} pic`} className="singlePostImage" /gt; lt;/Colgt; lt;Col xs={12} sm={12} md={9} className="singlePostHeading"gt; lt;h2gt;{post?.title}lt;/h2gt; --------------------------------------------------------------------------------------- lt;smallgt;Author: {post?.user?.name}lt;/smallgt; lt;br /gt; lt;smallgt;Posted on: lt;/smallgt; ------------------------------------------------------------------------------------- lt;/Colgt; lt;Col md={3} className="singlePostCategory"gt; lt;Category /gt; lt;/Colgt; lt;/Rowgt; lt;/Containergt; lt;/divgt; ); }; export default SinglePost;
Вот модели, пожалуйста, проверьте, есть ли какие-либо ошибки в моделях
import mongoose from 'mongoose'; const postSchema = mongoose.Schema( { user: { type: mongoose.Schema.Types.ObjectId, ref: 'User', required: [true, 'Please Author is required'], }, title: { type: String, required: true, }, desc: { type: String, required: true, }, img: { type: String, }, isLiked: { type: Boolean, default: false, }, isDisLiked: { type: Boolean, default: false, }, likes: [ { type: mongoose.Schema.Types.ObjectId, ref: 'User', }, ], disLikes: [ { type: mongoose.Schema.Types.ObjectId, ref: 'User', }, ], comments: [ { user: { type: mongoose.Schema.Types.ObjectId, ref: 'User', }, text: { type: String, required: true, }, name: { type: String, }, pic: { type: String, }, date: { type: Date, default: Date.now, }, }, ], categories: { type: Array, }, }, { timestamps: { createdAt: 'created_at', updatedAt: 'modified_at' }, } ); const Post = mongoose.model('Post', postSchema); export default Post;
User Model
import mongoose from 'mongoose'; import bcrypt from 'bcryptjs'; const userSchema = mongoose.Schema( { name: { type: String, required: [true, ' Please provide a name'], }, email: { type: String, trim: true, required: [true, ' Please provide a email'], unique: true, match: [ /^(([^lt;gt;()[]\.,;:s@"] (.[^lt;gt;()[]\.,;:s@"] )*)|(". "))@(([[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}])|(([a-zA-Z-0-9] .) [a-zA-Z]{2,}))$/, 'Please provide a valid email', ], lowercase: true, }, password: { type: String, minlength: 6, required: [true, 'Please add a password'], }, isAdmin: { type: Boolean, default: false, required: true, }, pic: { type: String, required: true, default: 'https://icon-library.com/images/anonymous-avatar-icon/anonymous-avatar-icon-25.jpg', }, }, { timestamps: { createdAt: 'created_at', updatedAt: 'modified_at' }, } ); userSchema.methods.matchPassword = async function (enteredPassword) { return await bcrypt.compare(enteredPassword, this.password); }; userSchema.pre('save', async function (next) { if (!this.isModified('password')) { next(); } const salt = await bcrypt.genSalt(10); this.password = await bcrypt.hash(this.password, salt); }); const User = mongoose.models.User || mongoose.model('User', userSchema); export default User;