Me gustaría mostrar los errores del servidor en las notificaciones. De forma predeterminada, la notificación dice "Solicitud incorrecta" cuando se devuelve un 400. Intenté cambiar el comportamiento con onFailure ( https://marmelab.com/react-admin/CreateEdit.html#onfailure ), pero el error de argumento siempre parece ser un HttpError() genérico. El mensaje se pierde en alguna parte, de alguna manera.
export const MyEdit = (props) => { const refresh = useRefresh(); const onFailure = (error) => { console.log('ERROR stack trace', error); // show 'Error' console.log('ERROR stack trace', error.stack); // show 'Error' refresh(); }; return ( <Edit onFailure={onFailure} {...props} > <SimpleForm> <TextInput source="full_name" fullWidth /> <TextInput source="email" fullWidth /> </SimpleForm> </Edit> ); };La respuesta en el lado del servidor suele ser algo así
{ field: [ error_message_1, error_message_2, ..., error_message_n ] }Con el depurador de Chrome, parece que mi problema debería venir de esta clase:
var HttpError = /** @class */ (function (_super) { __extends(HttpError, _super); function HttpError(message, status, body) { if (body === void 0) { body = null; } var _this = _super.call(this, message) || this; _this.message = message; _this.status = status; _this.body = body; Object.setPrototypeOf(_this, HttpError.prototype); _this.name = _this.constructor.name; if (typeof Error.captureStackTrace === 'function') { // Enter here Error.captureStackTrace(_this, _this.constructor); } else { _this.stack = new Error(message).stack; } // Returns an empty Error(); _this.stack = new Error().stack; return _this; } return HttpError; }(Error)); Devuelve un Error() vacío y la pila no contiene valores del message , body o status anterior.
Entonces, ¿cómo puedo mostrar el mensaje del servidor? Cualquier ayuda sería apreciada.
Por si acaso: Chrome 95: React-Admin: 3.19
Encontré la respuesta.
Probé error , error.message y error.stack pero no probé error.body . Se hizo evidente después de volver a leer mi pregunta.
error.body devuelve la respuesta JSON de back-end.