当后端的端点没有参数时,应该在选项中放置什么来通过id和axios和useeffect获取用户?

bvuwiixz  于 2023-10-18  发布在  iOS
关注(0)|答案(1)|浏览(133)

我希望我在标题中的问题是可以理解的。几天前我也在寻找解决方案,但找不到任何有效的方法。也许我不明白我不知道.任何帮助将不胜感激。谢谢
我已经成功地从后端的MongoDB中通过ID检索了一个用户,端点上没有参数。在Postman上通过在正文上写一个示例id进行测试。以前,我只通过参数检索user,从来没有把id放在body上。
这是端点(我问过我的导师,他说因为是NoSQL,所以我们不需要参数)。

router.get('/getUser', getSingle)

在服务上使用此代码:

export const getSingleUser = async (id: string) => {
const userList = await getCollection('users')
const userData = await userList?.findOne({
    _id: new ObjectId(id)
})

console.log('user', userData)

return userData
}

现在我想连接前端。我试着getAllUsers和它的工作与这些代码.

export const getAllUsers = async (): Promise<IResponse | IErrorResponse> => {
const axiosClient = AxiosClient.createInstance();

try {
    const response = await axiosClient.get("/api/v1/getAll");

    return {
        success: true,
        data: response.data
    };
} catch (err) {
    console.error(err);

    return {
        success: false,
        data: isAxiosError(err) ? err.message : (err as string)
    };
}
};

ReactJS部分

const [users, setUsers] = useState<userData[]>([]);

    useEffect(() => {
    // open browser console to see result
    const getUsers = async () => {
        const response = await getAllUsers();
        // const result = response.json();
        if (response.success) {
            setUsers(response.data as userData[]);
            console.log(response.data);
        } else {
            throw Error("Cannot fetch"); // temporary
            // create error notification wth Chakra
        }
    };
    getUsers()
}, []);

但我真的找不到一种方法来检索一个单一的用户使用id。**我不知道在端点之后的选项上放什么来定义要搜索的ID?**已经尝试了字符串,对象接口内部的id,它们不起作用。这是最新的审判。

export const getSingleUser = async(**id: string**): Promise<IResponse | IErrorResponse> =>{
const axiosClient = AxiosClient.createInstance();

try {
const response = await axiosClient.get("api/v1/getUser/", **{params: {ID: id}}**);

    return {
        success: true,
        data: response.data
    }
} catch (err) {
    console.error(err);

    return {
        success: false,
        data: isAxiosError(err) ? err.message: (err as string)
    }
}
}

**这里可以输入什么参数?**我很沮丧,我只是把一个ID从数据库。不起作用。什么都没发生控制台为空。

useEffect(() => {
    // open browser console to see result
    const getUser = async (**id: string**) => {        
    const response = await getSingleUser(**'64e738b63ef7a62f2d9a3d60'**);

            if (response.success) {
            setSingleUser(response.data as userData[]);
            console.log(response.data);
        } else {
            throw Error("Cannot fetch"); // temporary
            // create error notification wth Chakra
        }
}
getUser(**id**)
}, []);

那么,我可以在axios get函数的端点之后的选项和useeffect的参数中放置什么呢?再次感谢

yqhsw0fo

yqhsw0fo1#

在你的后端,你可以从请求路径中读取id:

router.get('/getUser/:id', getSingle)

在控制器getSingle中,您可以从请求路径访问用户id:

req.params.id

在前端将请求路径更改为:

export const getSingleUser = async(**id: string**): Promise<IResponse | IErrorResponse> =>{
const axiosClient = AxiosClient.createInstance();

try {
    const response = await axiosClient.get(`api/v1/getUser/${id}`);

    return {
       success: true,
       data: response.data
   }
} catch (err) {
    console.error(err);

    return {
       success: false,
       data: isAxiosError(err) ? err.message: (err as string)
    }
  }
}

相关问题