web-dev-qa-db-fra.com

RangeError: Code d'état non valide: 0

J'ai un problème où j'obtiens le code d'erreur suivant lors d'une tentative de POST sur cette application (en gardant à l'esprit que je suis un programmeur node.js/js débutant):

Erreur:

[20:22:28] [nodemon] starting `node app.js`
Running server on 3000
Mon, 27 Jun 2016 19:22:31 GMT express deprecated res.send(status, body): Use res.status(status).send(body) instead at routes\edit.js:35:25
c:\Users\Matt\WebstormProjects\ghs_restart\node_modules\mongodb\lib\utils.js:98
    process.nextTick(function() { throw err; });
                                  ^

RangeError: Invalid status code: 0
    at ServerResponse.writeHead (_http_server.js:192:11)
    at ServerResponse._implicitHeader (_http_server.js:157:8)
    at ServerResponse.OutgoingMessage.end (_http_outgoing.js:573:10)
    at ServerResponse.send (c:\Users\Matt\WebstormProjects\ghs_restart\node_modules\express\lib\response.js:204:10)
    at ServerResponse.json (c:\Users\Matt\WebstormProjects\ghs_restart\node_modules\express\lib\response.js:249:15)
    at ServerResponse.send (c:\Users\Matt\WebstormProjects\ghs_restart\node_modules\express\lib\response.js:151:21)
    at c:\Users\Matt\WebstormProjects\ghs_restart\routes\edit.js:35:25
    at c:\Users\Matt\WebstormProjects\ghs_restart\node_modules\mongodb\lib\collection.js:416:18
    at handleCallback (c:\Users\Matt\WebstormProjects\ghs_restart\node_modules\mongodb\lib\utils.js:96:12)
    at c:\Users\Matt\WebstormProjects\ghs_restart\node_modules\mongodb\lib\collection.js:705:5

app.js:

var express = require('express');

var router = express.Router();

var app = express();

var bodyParser = require('body-parser');
app.use( bodyParser.json() );       // to support JSON-encoded bodies
app.use(bodyParser.urlencoded({     // to support URL-encoded bodies
    extended: true
}));

var path = require('path');

var port = process.env.PORT || 3000;

var index = require('./routes/index');
var edit = require('./routes/edit');

app.use('/', index);
app.use('/edit', edit);

app.use(express.static(path.join(__dirname, 'public')));

app.set('view engine', 'jade');

app.set('views', 'views');

app.listen(port, function (err) {
    console.log("Running server on", port);
});

module.exports = index;

Voici ma route edit.js, où je crois que le problème se produit:

var express = require('express');

var router = express.Router();

var app = express();

var bodyParser = require('body-parser');
app.use( bodyParser.json() );       // to support JSON-encoded bodies
app.use(bodyParser.urlencoded({     // to support URL-encoded bodies
    extended: true
}));

var path = require('path');

var port = process.env.PORT || 3000;

var index = require('./routes/index');
var edit = require('./routes/edit');

app.use('/', index);
app.use('/edit', edit);

app.use(express.static(path.join(__dirname, 'public')));

app.set('view engine', 'jade');

app.set('views', 'views');

app.listen(port, function (err) {
    console.log("Running server on", port);
});

module.exports = index;
11
Matt

J'ai eu un message d'erreur similaire tout à l'heure et j'ai réussi à résoudre le problème en modifiant:

res.status(statusCode);

à:

if (statusCode >= 100 && statusCode < 600)
  res.status(statusCode);
else
  res.status(500);

ou juste:

res.status(statusCode >= 100 && statusCode < 600 ? err.code : 500);

C'est à dire. assurez-vous que vous n'essayez pas de définir un code d'état HTTP non valide quelque part.

C'est probablement le problème, mais il semble que vous ayez accidentellement dupliqué le app.js code au lieu de coller le edit.js code dans la question.

19
Bavell

Ce cas se produit également lorsque nous avons une erreur de validation lors de l'enregistrement du formulaire et que nous utilisons la méthode res.redirect au lieu de res.render

par exemple-

Veuillez utiliser

res.render('users/add', {
    countries: countries
});

au lieu de (c'est une mauvaise déclaration pour le nœud)

res.redirect('/users/add', {
    countries: countries
});
3
SohanLal Saini