Estoy tratando de acceder al mensaje de error del servidor express con el kit de herramientas redux. Si no se encuentra ningún usuario, enviamos un mensaje de error con el código de estado. Todo está bien cuando uso cartero, recibo una respuesta de error. Pero cuando intento acceder a esto en el lado del cliente, la respuesta de axios no está definida cuando recibo un error. En la pestaña de red, todavía obtengo un error. Eso lleva a que el reductor del kit de herramientas redux no se rechace y no pueda recibir un mensaje de error.
Controlador de servidor y función de servicio
controller .... try { const user = await findUser({ ...some values }); //I want this message in redux error message if (!user) return res.status(404).send('No user found!') const response = await friendService.sendInvitation({...some values}); res.send(response); } catch (error) { res.status(400).send(error); } ... const findUser=async({id,username})=>{ const user= await users.findOne(...some logic) return user }findUser está devolviendo al usuario si lo encuentra, si no, entonces no está definido. Cuando uso axios y busco un usuario no existente, obtengo una respuesta indefinida. Pero no puedo obtener ningún error del backend.
Editar
findUser devuelve nulo si no se encuentra el usuario
Rebanada del kit de herramientas de Redux con llamada a una API
const api = axios.create({ baseURL:'http://localhost:4000/api', headers:{ 'Content-Type':"application/json" }, withCredentials:true }) .... const sendInvitation = createAsyncThunk("friends/sendInvitation", async({ username, shortId }, thunkApi) => { try { if (!username || !shortId) return; const response = await api.post(`/friend/send`, { username, shortId }) return response; } catch (error) { console.log(error) }const sendInvitation = createAsyncThunk("friends/sendInvitation", async({ username, shortId }, thunkApi) => { try { if (!username || !shortId) return; const {data} = await api.post(`/friend/send`, { username, shortId }) return data; } catch (error) { const message = (error.response && error.response.data && error.response.data.message) || error.message || error.toString(); return thunkAPI.rejectWithValue(message); }Con su extraReducer,
.addCase(sendInvitation.rejected, (state, action) => { state.isLoading = false; state.isError = true; state.message = action.payload; })Entonces, cuando la solicitud falla, envía un mensaje en el estado, que se logra a partir de la llamada de rechazo
Supongo que tienes un estado inicial como este
const initialState = { data: null, isError: false, isSuccess: false, isLoading: false, message: "", }; if (!user) return res.status(404).send({message:'No user found!'})Puede ser una pregunta un poco obvia, pero ¿qué tipo de datos devuelve findUser si no se encuentra el usuario?
Si el valor de retorno se puede considerar "veraz" de todos modos, la línea if (!user) return res.status(404).send('No user found!') no se evaluará.
¿Tal vez cambiar findUser para devolver nulo si no se encuentra ningún usuario?