x
2 سال پیش توسط x مطرح شد
1 پاسخ

خطا در ایجاد پست پروژه ریکت

سلام خسته نباشید
من به مشکلی بر خوردم و نمیتونم درستش کنم ممنون میشم اگه بتونید کمکم کنید

من صفحه ای دارم که کاربر پستی رو ایجاد میکنه، پست برام ایجاد میشد تا قبل اینکه ID یوزر رو قرار میدم و به مشکلی روبه رو شدم که ایدی یوزر رو نمیتونه بشناسه

کد بک اند پست

const mongoose = require('mongoose')

const postSchema = new mongoose.Schema({
    content: String,
    user: {type: mongoose.Types.ObjectId, ref: 'Users'}
}, {
    timestamps: true
})

module.exports = mongoose.model('post', postSchema)

کنترلر پست

const Posts = require('../models/postModel')

const postCtrl = {
    createPost: async (req, res) => {
        try {
            const { content } = req.body

            const newPost = new Posts({
                content,

                user: req.user._id // آیدی رو نمیشناسه و تو کنسول  ارور 500 میده
            })
            await newPost.save()

            res.json({
                msg: 'Created Post!',
                newPost,
            })
        } catch (err) {
            return res.status(500).json({msg: err.message})
        }
    },
}

module.exports = postCtrl

کد فرانت Redux

import { GLOBALTYPES } from './globalTypes'
import { postDataAPI } from '../fetchData'

export const POST_TYPES = {
    CREATE_POST: 'CREATE_POST',
}

export const createPost = ({content, auth, token}) => async (dispatch) => {
    console.log({content, auth, token});
    try {
        dispatch({ type: GLOBALTYPES.ALERT, payload: {loading: true} })

        const res = await postDataAPI('posts', { content }, token)

        dispatch({ 
            type: POST_TYPES.CREATE_POST, 
            payload: {...res.data.newPost, user: auth.user} 
        })

        dispatch({ type: GLOBALTYPES.ALERT, payload: {loading: false} })

    } catch (err) {
        dispatch({
            type: GLOBALTYPES.ALERT,
            payload: {error: err.response.data.msg}
        })
    }
}

کد صفحه ایجاد پست

import React, { useState } from 'react'
import { useSelector, useDispatch } from 'react-redux'
import { GLOBALTYPES } from '../redux/actions/globalTypes'
import { createPost } from '../redux/actions/postAction'

const StatusModal = () => {
    const { auth, theme, token } = useSelector(state => state)
    const dispatch = useDispatch()

    const [content, setContent] = useState('')

    const handleSubmit = (e) => {
        e.preventDefault()
            dispatch(createPost({content, auth, token}))

        setContent('')
        dispatch({ type: GLOBALTYPES.STATUS, payload: false})
    }

    return (
        <div className="status_modal">
            <form onSubmit={handleSubmit}>
                <div className="status_header">
                    <h5 className="m-0">Create Post</h5>
                    <span onClick={() => dispatch({
                        type: GLOBALTYPES.STATUS, payload: false
                    })}>
                        &times;
                    </span>
                </div>

                <div className="status_body">
                    <textarea name="content" value={content}
                    placeholder={`${auth.user.username}, what are you thinking?`}
                    onChange={e => setContent(e.target.value)} />
                </div>
                <div className="status_footer">
                    <button className="btn btn-secondary w-100" type="submit">
                        Post
                    </button>
                </div>
            </form>
        </div>
    )
}

export default StatusModal

از اکستنشن ریداکس مرورگر، چک کردم و آیدی رو دقیقا هنگام پست کردن میفرسته .


ثبت پرسش جدید
x
تخصص : هیچولوژیست
@SZaaaa1111 2 سال پیش آپدیت شد
0

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!


برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام