mongodb 如何将UserID从State传递到GET URL

zzlelutf  于 2022-11-22  发布在  Go
关注(0)|答案(3)|浏览(115)

我当前将userInfo存储在一个状态中,

const [users, setUsers] = useState([])

请问,我如何将userId传递到axios的URL中,以便能够获取特定用户的帖子。请看下面我所做的。我知道我搞错了,但请帮助我。

** Jmeter 板组件**

const Dashboard = () => {

const getPost = () => {   

    axios.get(`/api/getpost/${users._id}`, //I want to fetch the userID on this URL. That measns it is to replace ${users._id}
     {
      withCredentials: 'true',
      headers: {
          'Accept': 'application/json',
          'Content-Type': 'application/json'
      }
    })
    .then((response) => {
      setUposts(response.data)
    })
  }
  useEffect(() => {
    getPost()
  }, [])

return (
//something here

)
}

用户模式这是我的用户模式

const userSchema = new Schema({
    username: {
        type: String,
        required: true
    },
    roles: {
        User: {
            type: Number,
            default: 2001
        },
        Mentor: Number,
        Admin: Number
    },
    password: {
        type: String,
        required: true
    },
    userID: {
        type: String,
        required: true
    },
    Profile: {
        type: mongoose.Schema.Types.ObjectId,
        ref: "profile",
    },
    refreshToken: String
});

const User = mongoose.model('user', userSchema);

module.exports = User;

API TO GET USER POST这是我根据用户ID从数据库中查找用户并填充的方法

router.get('/getpost/:id/', (req, res) => {
    const id = req.params.id;    
    // const profID = req.params.prof_id; 
    Userpost.find({User:id}).populate('User', {password: 0}).populate('Profile').exec((err,docs) => {
        if(err) throw(err);
        res.json(docs);
    })
});

如何设置用户下面的代码显示了我如何设置用户的状态。

const getUser = () => {
    axios.get('/api/users', {
      withCredentials: 'true',
      headers: {
          'Accept': 'application/json',
          'Content-Type': 'application/json'
      }
    })
    .then((response) => {
      setUsers(response.data)
    })
  };
  useEffect(() => {
    getUser()
  }, [])
tf7tbtn2

tf7tbtn21#

假设您首先调用getUser()api,并在useEffect中调用getPost()api之前设置用户的详细信息。您可以将userId作为参数传递给getPost()函数。在useEffect中,当您调用getPost()时,您将拥有您的用户数据,由于您将其存储在数组中,因此需要以数组形式访问它,如下所示:

个用户[0]。用户ID

因此,您可以通过以下方式实现代码:

<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script>
const Dashboard = () => {

const getPost = (userId) => {   

    axios.get(`/api/getpost/${userId}`, 
     {
      withCredentials: 'true',
      headers: {
          'Accept': 'application/json',
          'Content-Type': 'application/json'
      }
    })
    .then((response) => {
      setUposts(response.data)
    })
  }
  useEffect(() => {
    getPost(users[0].userId);
  }, [])

return (
//something here

)
}
czfnxgou

czfnxgou2#

将其替换为:
得到(/api/getpost/${users[0]._id}

wgx48brx

wgx48brx3#

问题是你在哪里setUsers我们需要知道里面有什么。特别是setUsers在哪里被调用。一个状态总是需要时间来设置。它不是仅仅因为你调用它就被设置的。如果它改变了,你应该用一个let来尝试,如果你马上需要它

const getUser = () => {
    axios.get('/api/users', {
      withCredentials: 'true',
      headers: {
          'Accept': 'application/json',
          'Content-Type': 'application/json'
      }
    })
    .then((response) => {
     let user = response.data
    })
  };
  useEffect(() => {
    getUser()
  }, [])

只需使用变量user(如上所述)代替userState。
useState() undefined in React just after set
有一个很长很正确的解释

相关问题