2017-11-28 1 views
1

Ich versuche Fehler für POST mit dem gleichen Benutzer E-Mail mit dem folgenden (mit superagent) Handhabung zu tun:schlecht Anfrage statt voller Fehler bekommen Nachricht

export function signUpUser(userData) { 
    return async dispatch => { 
    try { 
     const currentUser = await request.post(`${url}/signup`).send(userData); 
     set(window.localStorage, 'x-auth', currentUser); 
     dispatch(signUpSuccessObject(userData)); 
    } catch (error) { 
     dispatch(signUpFailObject(error)); 
    } 
    }; 
} 

Ich möchte erhalten die folgenden, die ich sehen kann in meinem Netzwerk tab:

{ "name": "SequelizeUniqueConstraintError", "Fehler": [{ "message": "E-Mail muss eindeutig sein", "type": "unique Verletzung", "Weg ":" email "," value ":" [email protected] "," Herkunft ":" DB "," Instanz ":

Aber anstatt alles, was ich bekommen ist:

Bad Request

Mein Controller für API:

User.create(
     Object.assign(req.body, { 
     password: bcrypt.hashSync(req.body.password, 10), 
     }) 
    ) 
     .then(() => { 
     const myToken = jwt.sign({email: req.body.email}, 'leogoesger'); 
     res.status(200).send(myToken); 
     }) 
     .catch(err => res.status(400).send(err)); 
    }, 
+0

Der Status 400 (auch bekannt als "Bad Request") zeigt einen Client-Fehler (wie zum Beispiel fehlerhafte Syntax, zu groß, etc.). Dies ist nicht wirklich die Quelle Ihres Fehlers, insbesondere im Falle eines DB-Feldes, das die Validierung nicht besteht. Haben Sie versucht, einen anderen Statuscode zurückzusenden, um festzustellen, ob Sie dadurch den Fehler clientseitig nicht sehen können? Meine Vermutung ist, dass das Standardverhalten des Browsers bestimmte Statuscodes übernehmen könnte, und 400 könnte einer davon sein? – Jaxx

+0

Anscheinend ist die Wahl, welchen Statuscode für eine Situation wie Ihre zu verwenden, zur Debatte. Siehe https://stackoverflow.com/questions/19671317/400-bad-request-http-error-code-bedeutet - einige sehr interessante Antworten und Kommentare dort. – Jaxx

+1

Das Problem ist "Fehler" beim Versand. Was ich hätte verwenden sollen, ist "error.response". Es ist merkwürdig, wie es anders als "onSuccess" funktioniert. – Leogoesger

Antwort

1

res.send() wird schlicht text/html Antworten senden.

Verwenden Sie res.json(myToken) und res.status(400).json(err) für eine JSON-API.

0

https://github.com/visionmedia/superagent/issues/1074

^^ verwendet, um dieses als Referenz.

Grundsätzlich brauche ich error.response. Dies gibt mir das gesamte Objekt, wodurch ich Zugriff auf die Fehlermeldung erhalten kann.

So voll funktionierenden Code wäre:

export function signUpUser(userData) { 
    return async dispatch => { 
    try { 
     const currentUser = await request 
     .post(`${url}/signup`) 
     .send(userData) 
     .type('json'); 
     set(window.localStorage, 'x-auth', currentUser); 
     dispatch(signUpSuccessObject(userData)); 
    } catch (e) { 
     dispatch(signUpFailObject(e.response.body)); 
    } 
    }; 
}