在這里,我有一個名為 User `
import mongoose from "mongoose";
const Schema = mongoose.Schema;
const userSchema = new Schema({
name: {
type: String,
required: true
},
email: {
type: String,
required: true,
unique: true
},
password: {
type: String,
required: true,
minLength: 6
},
blogs:[{type:mongoose.Types.ObjectId,ref:"Blog",required:true}]
});
export default mongoose.model("User",userSchema);
//users
`
我有一個名為 Blogs 的模型`
import mongoose from "mongoose";
const Schema = mongoose.Schema;
const blogSchema = new Schema({
title:{
type: String,
required: true,
},
description:{
type: String,
required: true,
},
image:{
type: String,
required: true,
},
user:{
type: mongoose.Types.ObjectId,
ref:"User",
required: true
},
name:{
}
})
export default mongoose.model("Blog",blogSchema)
`
我想使用用戶模型的名稱在博客中填寫名稱。`
import axios from 'axios'
import { useState } from 'react'
import { useEffect } from 'react'
import Blog from './Blog'
import { useSelector } from 'react-redux'
const Blogs = () =>{
const isLoggedIn = useSelector(state=> state.isLoggedIn)
const [blogs,setBlogs] = useState()
const sendRequest = async() => {
const resp = await axios.get('http://localhost:5000/api/blog')
.catch(err=>console.log(err))
const data = await resp.data
return data
}
useEffect(()=>{
sendRequest().then(data=>setBlogs(data.blogs))
},[])
console.log(blogs)
return(
<>
{isLoggedIn && blogs && blogs.map((blog,index)=><Blog userName={blog.user.name} title={blog.title} description={blog.description} imageURL={blog.imageURL} />)}
</>
)
}
export default Blogs
` 這里,當我使用blog.user.name時出現錯誤 我得到如下錯誤: Blogs.jsx:21 Uncaught TypeError: Cannot read properties of undefined (reading 'name') react_devtools_backend.js:4026 以上錯誤發生在組件:考慮在樹中添加錯誤邊界以自??定義錯誤處理行為。
我怎么解決這個問題?
uj5u.com熱心網友回復:
嗨,我相信您在后端查詢博客時沒有使用博客模型上的填充方法。我曾想象你會在后端擁有這種性質的東西
const blogs = require('../models/blog')
blogs.find({}).populate('$user')
$user 應該是您嘗試填充的路徑的名稱。
populate 方法只是簡單地讀取用戶集合來獲取用戶資訊,而且您需要在保存博客時存盤用戶'_id',這樣填充才能作業。
您可以在此處閱讀有關填充方法的資訊 https://mongoosejs.com/docs/populate.html。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/531062.html
下一篇:單擊重置時不要關閉模式
