2016-06-25 3 views
2

내가 expressjs/몽구스를 가진 사용자를 등록하려고의 특성 'USER_FIRST_NAME'을 읽을 수 없습니다,하지만 난 아래의 오류를 얻고있다 : 시간정의되지 않은

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) 

내가 해봤 디버깅과 다른 사람들의를 보았다 문제는 있지만 어디에도 가지 않습니다. 어떤 도움이라도 실제로 가능합니다.

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> 

: 아래에있는 내 코드를 참조하십시오. 등록이 끝나면 새 페이지로 리디렉션하고 싶습니다. 나는 현재 "app.use (express.static (__ dirname + '/user_profile.html'));"를 가지고 있지만, 이것이 정확하지 않거나 올바르지 않다고 확신합니다.

답변

2

req.body은 Express의 미들웨어에서 실제로 처리되어 사용자 정의 코드가 액세스하기 전에 요청 데이터를 JSON으로 변환합니다.

프로젝트 ( npm install body-parser)에서 body-parser 포함하고 첫 번째 app.post 전에이 추가

보십시오 : 이것은, 서버에 요청을 잡아 당신의 POST 호출에서 데이터를 분석하고, 둘 것이다

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

그것은 req.body와 같은 JSON 객체에 있습니다.

리디렉션에 관해서는

, 호출의 말에 바로 도움을 간단한 res.redirect('/newPage')

+0

감사합니다. Evan V. res.redirect haha ​​때문에 수표를드립니다. –

2

오류는 단순히 req.body의 본문이 null임을 나타냅니다. 따라서 Google 검색 후 Stack Overflow returned me to this question. 기본적으로 다음과 같이 표시됩니다.

요청의 본문 데이터를 구문 분석하기 위해 무언가를 사용해야합니다. bodyParser

같은 것을 사용하는 것을 의미

그러나 @ andrea.spot는 BodyParser 미들웨어가 별도로 설치해야합니다 (난 당신이 사용하는 가정) 지금까지 Express4 이후 코멘트에 언급한다. Express4에 대한 그래서

, 제이의 대답은 당신이 구성 할 때 다음과 같은 표현 사용해야 제안 @ : @Jay가 지적한대로, 당신이 호출하여 설치할 수 있습니다, 또한

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

을 :

npm install body-parser --save 
+0

감사합니다 당신을 추가! 내 코드가 지금 실행 중입니다! –

관련 문제