Recibo este error cuando intento recuperar publicaciones de un usuario específico. El código para obtener los datos es correcto. No estoy seguro de dónde viene el error.
Del lado del servidor
Lado del cliente
A continuación se muestra el código para la publicación individual.
const UserPosts = () => { const [user, setUser] = useState() useEffect(() => { const id = localStorage.getItem("userId"); const sendRequest = async () => { const res = await axios.get(`/post/user/${id}`) .catch(error => console.log(error)); const data = await res.data; console.log(data) return data; } sendRequest() .then((data) => { setUser(data.user) console.log(data) }) }, []) return ( <div> {user && user.posts.map((post, index) => ( <Post id={post._id} isUser={true} key={index} username={user.username} caption={post.caption} selectedFile={post.selectedFile} createAt={post.createAt} /> )).reverse()} </div> ) } export default UserPosts;Este es el controlador de correos para esa ruta.
export const getUserById = async (req, res) => { const userId = req.params.id; let userPosts; try { userPosts = await User.findById(userId).populate("posts"); } catch (error) { console.log(error) } if (!userPosts) { res.status(404).json({ message: "No Post Found" }) } res.status(200).json({ user: userPosts }) }useEffect(() => { const id = localStorage.getItem("userId"); const sendRequest = async () => { const {data} = await axios.get(`http://localhost:backend-port/post/user/${id}`) setUser(data.user) } sendRequest() }, [])Por favor, inténtalo
Su problema, como señala @Gavin, es que responde con un estado de 404, pero luego cae, fuera del bloque if , a otra llamada res.status . No puede enviar el estado más de una vez de esa manera, y debe reestructurar su lógica para evitar llamar a res.status dos veces. Dos soluciones fáciles y viables:
return en el bloque de manejo de errores para evitar caer en el caso sin error. if (!userPosts) { res.status(404).json({ message: "No Post Found" }) return; } res.status(200).json({ user: userPosts })else para separar el caso de error del caso de no error de manera simétrica. if (!userPosts) { res.status(404).json({ message: "No Post Found" }) } else { res.status(200).json({ user: userPosts }) }Me di cuenta de cuál era el problema.
Si bien mi principal problema fue que el componente no mostraba los datos en la página debido a que obtuvo la ruta de inicio de sesión incorrecta en el lado del cliente. Cuando el usuario inicia sesión, almacené la identificación del usuario en el almacenamiento local y recuperé la identificación del usuario del almacenamiento local para obtener la identificación del usuario al mostrar la publicación del usuario.
El problema en el lado del servidor se debió a que no se devolvió la declaración if y condujo a la devolución de 2 respuestas.