【问题标题】:Handling POST submission处理 POST 提交
【发布时间】:2015-12-13 13:43:39
【问题描述】:

看起来很简单,但我在代码中找不到错误。

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);
    });
};

当我发布表单时出现错误:

TypeError:无法读取未定义的属性“名称” 在 /Users/demas/temporary/express/1/routes.js:11:22 在 Layer.handle [as handle_request] (/Users/demas/temporary/express/1/node_modules/express/lib/router/layer.js:95:5) 在下一个(/Users/demas/temporary/express/1/node_modules/express/lib/router/route.js:131:13) 在 Route.dispatch (/Users/demas/temporary/express/1/node_modules/express/lib/router/route.js:112:3) 在 Layer.handle [as handle_request] (/Users/demas/temporary/express/1/node_modules/express/lib/router/layer.js:95:5) 在 /Users/demas/temporary/express/1/node_modules/express/lib/router/index.js:277:22 在 Function.process_params (/Users/demas/temporary/express/1/node_modules/express/lib/router/index.js:330:12) 在下一个(/Users/demas/temporary/express/1/node_modules/express/lib/router/index.js:271:10) 在 expressInit (/Users/demas/temporary/express/1/node_modules/express/lib/middleware/init.js:33:5) 在 Layer.handle [as handle_request] (/Users/demas/temporary/express/1/node_modules/express/lib/router/layer.js:95:5)

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

【问题讨论】:

    标签: node.js express


    【解决方案1】:

    您需要在进行路由之前进行配置,因此请向下移动:

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

    下面:

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

    ...应该可以工作。

    【讨论】:

      猜你喜欢
      • 2017-07-14
      • 2016-11-10
      • 2015-03-10
      • 1970-01-01
      • 1970-01-01
      • 2023-03-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多