2016-05-25 6 views
1

app.js:Get undefined in req.body.id (Körper-Parser und Express 4) NodeJS

var express = require('express'); 
var path = require('path'); 
var bodyParser = require('body-parser'); 
var routes = require('./routes/index'); 
var person = require('./routes/person'); 

var app = express(); 

// view engine setup 
app.set('views', path.join(__dirname, 'views')); 
app.set('view engine', 'pug'); 

app.use(bodyParser.json()); 
app.use(bodyParser.urlencoded({ extended: false })); 
app.use(express.static(path.join(__dirname, 'public'))); 

app.use('/', routes); 
app.use('/person', person); 

module.exports = app; 

Routen/person.js:

var express = require('express'); 
var bodyParser = require('body-parser'); 
var urlencodedParser = bodyParser.urlencoded({ extended: false }); 
var router = express.Router(); 

/* GET page. */ 
router.get('/', function (req, res) { 
    res.render('person', { 
     message: 'Person works' 
    }); 
}); 

router.post('/', urlencodedParser, function (req, res) { 
    res.send('Thank you!'); 
    console.log(req.body.firstname); 
    console.log(req.body.lastname); 
}); 

views/person.pug:

extends layout 

block content 
    h1 Welcome #{id} 
    p= message 
    br 
    h2= qstr 
    br 
    form(method='post', action='/person') 
     label First name  
     input#firstname(type='text')  
     br 
     label Last name 
     input#lastname(type='text') 
     input(type='submit', value='Submit') 

Fragen:

1) Ist es notwendig, in jedem Weg zur Anzeige d ?:

var bodyParser = require('body-parser'); 
var urlencodedParser = bodyParser.urlencoded({ extended: false }); 

2) Warum erhalte ich diese:

enter image description here

Antwort

0

1.You nicht körper Parser in jeder Route verwenden müssen. Body-Parser ist eine Middleware, mit der Daten aus dem Inhaltstyp application/x-www-urlencoded abgerufen werden. Wenn Sie also sicher sind, dass die Daten, die Sie in Ihrem Körper erhalten, nicht vom Typ x-www-urlencodiert sind, müssen Sie sie nicht verwenden.

2. Bitte überprüfen Sie, ob Sie die Daten in Post-Anfrage übergeben. Sie können den Chrome-Extension-Postboten verwenden, um jede Art von Abfrage zu erstellen.

+1

[Bild] (https://i.gyazo.com/44c9d9a08ec001424e3c40a2fce4cd4f.png) Gelöst !, können Sie mir erklären, warum funktioniert nicht, wenn ich die Werte im Browser setzen? –

+0

Nun, wenn Sie Körper-Parser in app.js deklarieren, ist es nicht notwendig, etwas zu setzen! –

+0

Gut gemacht Kumpel! Das einzige, was Sie von einem Browser aus tun können, ist das Senden bestimmter URLs und das Anfügen von Abfrageparametern an diesen Browser. Aber sie werden von einer Anfrage bekommen. Deshalb müssen Sie eine Erweiterung verwenden (Sie können auch ein Formular mit einer Post-Methode verwenden) – nrgwsth