2017-08-01 2 views
0

Ich bin auf dieses Problem fest, sehen, ob jemand helfen kann. Ich habe diese Node.js Anwendung und wenn ich ein Formular, und gehen Sie auf die Registrierungsteil einreichen bekomme ich diesen Fehler:RangeError: Ungültiger Statuscode: 0 Knoten js

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:574:10) 
    at ServerResponse.send (C:\projects\authentication\node_modules\express\lib\response.js:211:10) 
    at ServerResponse.json (C:\projects\authentication\node_modules\express\lib\response.js:256:15) 
    at C:\projects\authentication\app.js:24:7 
    at Layer.handle_error (C:\projects\authentication\node_modules\express\lib\router\layer.js:71:5) 
    at trim_prefix (C:\projects\authentication\node_modules\express\lib\router\index.js:315:13) 
    at C:\projects\authentication\node_modules\express\lib\router\index.js:284:7 
    at Function.process_params (C:\projects\authentication\node_modules\express\lib\router\index.js:335:12) 

hier ist die app.js

var express = require('express'); 
var app = express(); 
var bodyParser = require('body-parser'); 

// include routes 
var routes = require('./routes/router'); 
app.use('/', routes); 
app.use('/register', routes); 

// serve static files from /public 
app.use(express.static(__dirname + '/template')); 

// catch 404 and forward to error handler 
app.use(function(req, res, next) { 
    var err = new Error('File Not Found'); 
    err.status = 404; 
    next(err); 
}); 

// error handler 
// define as the last app.use callback 
app.use(function(err, req, res, next) { 
    res.status(err.status || 500); 
    res.json('error', { 
    message: err.message, 
    error: {} 
    }); 
}); 

/////// JSON parser 
app.use(bodyParser.json()); 
app.use(bodyParser.urlencoded({ extended: false })); 

app.use(function (req, res) { 
    res.setHeader('Content-Type', 'text/plain'); 
    res.write('you posted:\n'); 
    res.end(JSON.stringify(req.body, null, 2)); 
}); 


// listen on port 3000 setting server 
app.listen(3000, function() { 
    console.log('Express app listening on port 3000'); 
}); 


to handle the http request i have a route.js file, wich is like this: 
var express = require('express'); 
var router = express.Router(); 
var path = require('path'); 


// GET/
router.get('/', function(req, res, next) { 
    //res.setHeader('Content-type','text/plain'); 
    return res.sendFile(path.join(__dirname + "/../index.html")); 
}); 

router.post('/register', function(req, res){ 

    //console.log(req.body); 
    return res.send(req.body.email); 
    /* 
    if (req.body.email && 
     req.body.username && 
     req.body.password && 
     req.body.passwordConf) { 
      var userData = { 
      email: req.body.email, 
      username: req.body.username, 
      password: req.body.password, 
      passwordConf: req.body.passwordConf 
      }; 
    //use schema.create to insert data into the db 
     User.create(userData, function (err, user) { 
     if (err) { 
      return next(err); 
     } else { 
      return res.redirect('/profile'); 
     } 
     }); 
    }*/ 
}); 


module.exports = router; 

, wenn ich auf Zugang versuchen via get request auf der root '/' es öffnet die html mit einem formular, diese form geht zu '/ register' so dann bekomme ich den fehler, es ist irgendwie komisch wie bekomme ich die html-datei fein über get auf root aber wenn ich versuche auf '/ register' zuzugreifen ich erhalte nur diesen fehler, habe schon eine menge sachen ausprobiert und ich kann nicht was ich falsch mache, hoffe das ich etwas hilfe bekomme. Danke.

Antwort

3

Werfen Sie einen Blick auf die Stack-Trace:

RangeError: Invalid status code: 0 
    at ServerResponse.writeHead (_http_server.js:192:11) 
    ... 
    at C:\projects\authentication\app.js:24:7 

Okay, so ist der Fehler in Zeile 24 von app.js verursacht, das ist dieses:

res.json('error', { 
    message: err.message, 
    error: {} 
    }); 

Express versucht 'error' zu interpretieren als Statuscode (weil ältere Versionen von Express akzeptiert res.json(status, obj), die veraltet ist), und weil es nicht etwas wie eine Zahl aussieht, wird dies intern in die Zahl "0" konvertiert, die einen ungültigen Statuscode ist, daher die err oder.

Ich denke, man dies bedeutete:

res.json({ 
    message: err.message, 
    error: {} 
    }); 

EDIT: wie für die anderen Fehler, müssen Sie sicherstellen, dass die body-parser Middleware vor Ihre Routen erklärt:

var bodyParser = require('body-parser'); 

/////// JSON parser 
app.use(bodyParser.json()); 
app.use(bodyParser.urlencoded({ extended: false })); 

// include routes 
var routes = require('./routes/router'); 
app.use('/', routes); 
app.use('/register', routes); 

Andernfalls werden Anforderungen nicht über diese Middleware weitergegeben, bevor sie Ihre Route-Handler treffen.

+0

wow, das ist ein Stück Code, Fehler zu behandeln, in der Tat haben Sie Recht und jetzt bin immer ich die Nachricht richtig ERROR, es ist irgendwie ironisch, dieses Problem ist gelöst, aber der erste Fehler besteht immer noch ... jetzt bekomme ich diese Nachricht beim Zugriff auf '/ register' {"message": "Kann die Eigenschaft 'email' von undefined nicht lesen", "error": { }} ... sieht es so aus, als ob ich nicht die Informationen von der Post-Anfrage oder etwas wie dieser bekomme. –

+0

@AndreyViktorKandauroff siehe meine Bearbeitung. – robertklep

+0

Mann, das ist gut, Sie helfen, aber es ist immer noch nicht perfekt, wenn Sie mir eine Idea wieder geben können, weil ich jetzt eine Nachricht ohne Fehler bekomme, aber die Nachricht ist nicht korrekt, ich bekomme nur die E-Mail-Informationen. so: {"email": "[email protected]"} –

0

dies die HTML-Datei ist

</head> 
<body> 
    <form action="/register" method="post"> 
     <div> 
      <label for="email">email:</label> 
      <input type="email" name="email" id="email" /> 
     </div> 
     <div> 
      <label for="username">username:</label> 
      <input type="text" name="username" id="username" /> 
     </div> 
     <div> 
      <label for="password">password:</label> 
      <textarea id="password" name="password"></textarea> 
     </div> 
     <div> 
      <label for="passwordConf">password again:</label> 
      <textarea name="passwordConf" id="passwordConf"></textarea> 
     </div> 
     <div class="button"> 
      <button type="submit">submit</button> 
     </div> 
    </form> 
</body> 
</html> 
+0

Bitte bearbeiten Sie Ihre Frage und fügen Sie diese zu :) – robertklep

Verwandte Themen