221 votes

Comment spécifier le code d'erreur HTTP en utilisant Express.js ?

J'ai essayé :

app.get('/', function(req, res, next) {
    var e = new Error('error message');
    e.status = 400;
    next(e);
});

et :

app.get('/', function(req, res, next) {
    res.statusCode = 400;
    var e = new Error('error message');
    next(e);
});

mais toujours un code d'erreur de 500 est annoncé.

1 votes

Ma réponse à une question connexe pourrait vous aider : stackoverflow.com/questions/10170857/

2 votes

Pourriez-vous mettre à jour la réponse acceptée ?

0 votes

12voto

Ido Ran Points 1190

D'après ce que j'ai vu dans Express 4.0, cela fonctionne pour moi. C'est un exemple de middleware nécessaire à l'authentification.

function apiDemandLoggedIn(req, res, next) {

    // if user is authenticated in the session, carry on
    console.log('isAuth', req.isAuthenticated(), req.user);
    if (req.isAuthenticated())
        return next();

    // If not return 401 response which means unauthroized.
    var err = new Error();
    err.status = 401;
    next(err);
}

11voto

catphive Points 1645

La version du middleware errorHandler fournie avec certaines (peut-être anciennes ?) versions d'express semble avoir le code d'état codé en dur. La version documentée ici : http://www.senchalabs.org/connect/errorHandler.html d'autre part, vous permet de faire ce que vous essayez de faire. Alors, essayez peut-être de passer à la dernière version d'express/connect.

9voto

webarnes Points 41

Vieille question, mais elle apparaît toujours sur Google. Dans la version actuelle d'Express (3.4.0), vous pouvez modifier res.statusCode avant d'appeler next(err) :

res.statusCode = 404;
next(new Error('File not found'));

0 votes

Que fait-on ensuite ?

0 votes

next appelle le gestionnaire suivant qui, dans express.js, essaie généralement de rendre des pages d'erreur.

9voto

Tarun Rawat Points 156

J'ai essayé

res.status(400);
res.send('message');

mais ça me donnait erreur :

(node:208) UnhandledPromiseRejectionWarning : Erreur : Impossible de définir les en-têtes après qu'ils aient été envoyés.

Ce travail pour moi

res.status(400).send(yourMessage);

4voto

Rajeev Jayaswal Points 407

Express déprécié res.send(body, status) .

Utilice res.status(status).send(body) au lieu de

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X