2016-06-25 7 views
2

Ich versuche, einen Benutzer mit Express.js/Mungo zu registrieren, lesen, aber ich erhalte den Fehler unten:Kann nicht Eigentum ‚USER_FIRST_NAME‘ undefinierter

TypeError: Cannot read property 'user_first_name' of undefined 
at C:\Quiz webPolitica\server.js:20:24 
at Layer.handle [as handle_request] (C:\Quiz webPolitica\node_modules\express\lib\router\layer.js:95:5) 
at next (C:\Quiz webPolitica\node_modules\express\lib\router\route.js:131:13) 
at Route.dispatch (C:\Quiz webPolitica\node_modules\express\lib\router\route.js:112:3) 
at Layer.handle [as handle_request] (C:\Quiz webPolitica\node_modules\express\lib\router\layer.js:95:5) 
at C:\Quiz webPolitica\node_modules\express\lib\router\index.js:277:22 
at Function.process_params (C:\Quiz webPolitica\node_modules\express\lib\router\index.js:330:12) 
at next (C:\Quiz webPolitica\node_modules\express\lib\router\index.js:271:10) 
at serveStatic (C:\Quiz webPolitica\node_modules\express\node_modules\serve-static\index.js:75:16) 
at Layer.handle [as handle_request] (C:\Quiz webPolitica\node_modules\express\lib\router\layer.js:95:5) 
at trim_prefix (C:\Quiz webPolitica\node_modules\express\lib\router\index.js:312:13) 
at C:\Quiz webPolitica\node_modules\express\lib\router\index.js:280:7 
at Function.process_params (C:\Quiz webPolitica\node_modules\express\lib\router\index.js:330:12) 
at next (C:\Quiz webPolitica\node_modules\express\lib\router\index.js:271:10) 
at expressInit (C:\Quiz webPolitica\node_modules\express\lib\middleware\init.js:33:5) 
at Layer.handle [as handle_request] (C:\Quiz webPolitica\node_modules\express\lib\router\layer.js:95:5) 

Ich habe stundenlang versucht, das Debuggen und sah andere Menschen nach oben Probleme, aber ich komme nirgendwohin. Jede Hilfe ist wirklich appreciated. Bitte beachten Sie meinen Code unten:

server.js

var express = require('express'); 
var app = express(); 

app.use(express.static(__dirname + '/public')); 

var mongoose = require('mongoose'); 
mongoose.connect('mongodb://localhost/iPolitico'); 

var Register_User_Schema = new mongoose.Schema({ 
    Firstname: { type: String, required: true }, 
    Lastname: { type: String, required: true }, 
    Email:  { type: String, required: true, index: { unique: true } }, 
    Password: { type: String, required: true } 
}, {collection:"user"}); 

var Register_User = mongoose.model("Register_User", Register_User_Schema); 

app.post('/register', function(req,res){ 
    new Register_User({ 
    Firstname: req.body.user_first_name, 
    Lastname : req.body.user_last_name, 
    Email : req.body.user_email, 
    Password : req.body.user_password 
    }).save(function(err, doc){ 
    if(err){ 
     res.json; 
    }else{ 
     app.use(express.static(__dirname + '/user_profile.html')); 
    } 
    }) 
}); 

app.get('/', function(req, res){ 
    //res.send('hello world'); 
    Register_User.find(function (err, data){ 
    res.json(data); 
    }); 
}); 

app.listen(3000); 

index.html

<form role="form" action="/register" method="POST" class="registration_form"> <!--action="javascript:;" onsubmit="register_user()"--> 
    <div class="form-group"> 
<label class="sr-only" for="form-first-name">First name</label> 
     <input type="text" name="user_first_name" id="user_first_name" placeholder="First name..." class="form-first-name form-control" > 
    </div> 
    <div class="form-group"> 
     <label class="sr-only" for="form-last-name">Last name</label> 
     <input type="text" name="user_last_name" id="user_last_name" placeholder="Last name..." class="form-last-name form-control"> 
    </div> 
    <div class="form-group"> 
     <label class="sr-only" for="form-email">Email</label> 
     <input type="text" name="user_email" id="user_email" placeholder="Email..." class="form-email form-control" > 
    </div> 
    <div class="form-group"> 
     <label class="sr-only" for="form-password">Senha</label> 
     <input type="password" name="user_password" id="user_password" placeholder="Senha..." class="form-password form-control" > 
    </div> 
    <div class="form-group"> 
     <label class="sr-only" for="form-password">Confirmar Senha</label> 
     <input type="password" name="user_confirm_password" placeholder="Confirmar Senha..." class="form-password form-control" > 
    </div> 
    <button type="submit">Sign me up!</button> 
    </form> 

Als Seite Frage. Wenn ich mit der Registrierung fertig bin, möchte ich auf eine neue Seite umleiten. Ich habe derzeit "app.use (express.static (__ dirname + '/user_profile.html'));", aber ich bin mir ziemlich sicher, dass das nicht korrekt oder halb richtig ist.

Antwort

2

Die req.body wird tatsächlich von Middleware in Express verarbeitet, um die Anforderungsdaten in JSON zu konvertieren, bevor Ihr benutzerdefinierter Code darauf zugreift.

Versuchen einschließlich body-parser in Ihrem Projekt (npm install body-parser) und das Hinzufügen dieser vor dem ersten app.post:

var bodyParser = require('body-parser'); 
app.use(bodyParser.json()); 

Dadurch wird die Anfrage an den Server greifen wird, die Daten von Ihrem POST Anruf analysieren, und setzen es in einem JSON-Objekt als req.body.

Wie zum Umleiten, am Ende eines Anrufs fügen Sie einfach einen einfachen res.redirect('/newPage')

+0

Danke Evan V. Ich gebe dir einen Scheck wegen der res.redirect haha –

2

Sie Fehler einfach sagt, dass der Körper in req.body null ist. Also nach etwas Googeln Stack Overflow returned me to this question. Im Grunde sagt es das:

Sie müssen etwas verwenden, um die Körperdaten der Anfrage zu analysieren.

Das bedeutet so etwas wie bodyParser

Verwendung Aber wie @ andrea.spot erwähnt in den Kommentaren, seitdem Express4 (was ich nehme an, Sie verwenden) die BodyParser Middleware separat installiert werden muss.

Also für Express4, @ Jay Antwort empfiehlt Ihnen die folgenden bei der Konfiguration von Express verwenden sollten:

var bodyParser = require('bodyParser'); 
app.use(bodyParser().json());` 

Auch als @Jay weist darauf hin, können Sie es durch den Aufruf installieren:

npm install body-parser --save 
+0

Sie Dank für die Hilfe! Mein Code läuft jetzt! –

Verwandte Themen