2015-09-16 26 views
0

看起来像一个简单的任务,但我无法找到我的代码中的错误。处理POST提交

app.js

var http = require('http'); 
var express = require('express'); 
var app = express(); 
var bodyParser = require('body-parser'); 
var routes = require('./routes')(app); 

app.use(bodyParser.urlencoded({ 
    extended: true 
})); 
app.use(bodyParser.json()); 


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

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

app.listen(3000, function() { 
    console.log('hello'); 
    console.log('express server listening on port:' + 3000); 
}); 

index.jade

html 
    head 
     title Welcome 
    body 
     p Enter your name and email address to become a member. 
     form(action='/signup', method='post') 
      div 
       label Name 
       input(type='text', name='name') 
      div 
       label Email 
       input(type='text', name='email') 
      div 
       input(type='submit') 

routes.js

module.exports = function(app) { 

    app.get('/', function(req, res) { 
     res.render('index'); 
    }); 

    app.post('/signup', function(req, res) { 
     console.log(req); 
     console.log(req.body); 

     var name = req.body.name; 
     var email = req.body.email; 

     console.log('Name: ' + name); 
     console.log('Email: ' + email); 
     res.json(req.body); 
    }); 
}; 

当我发布,我得到t时的形式他错误:

 
TypeError: Cannot read property 'name' of undefined 
    at /Users/demas/temporary/express/1/routes.js:11:22 
    at Layer.handle [as handle_request] (/Users/demas/temporary/express/1/node_modules/express/lib/router/layer.js:95:5) 
    at next (/Users/demas/temporary/express/1/node_modules/express/lib/router/route.js:131:13) 
    at Route.dispatch (/Users/demas/temporary/express/1/node_modules/express/lib/router/route.js:112:3) 
    at Layer.handle [as handle_request] (/Users/demas/temporary/express/1/node_modules/express/lib/router/layer.js:95:5) 
    at /Users/demas/temporary/express/1/node_modules/express/lib/router/index.js:277:22 
    at Function.process_params (/Users/demas/temporary/express/1/node_modules/express/lib/router/index.js:330:12) 
    at next (/Users/demas/temporary/express/1/node_modules/express/lib/router/index.js:271:10) 
    at expressInit (/Users/demas/temporary/express/1/node_modules/express/lib/middleware/init.js:33:5) 
    at Layer.handle [as handle_request] (/Users/demas/temporary/express/1/node_modules/express/lib/router/layer.js:95:5) 

在控制台中,我可以看到req.body是未定义的。为什么?

回答

1

你需要你做的路由前做你的配置,所以向下移动一行:

var routes = require('./routes')(app); 

下面这个样子:

app.use(bodyParser.urlencoded({ 
extended: true 
})); 
app.use(bodyParser.json()); 

...应该工作。