Node.js表示post参数总是未定义的

我对Node.js的开发很新,而且我知道有几个这样的堆栈溢出问题,不幸的是,似乎没有解决我的问题。 所以我觉得我所能做的就是问我的问题

所以我使用Express和Jade视图引擎来使用Node.js。

我基于这篇文章的一些代码: http : //howtonode.org/express-mongodb

无论如何,这是我的

节点应用程序:

var express = require('express'); var home = require('./routes/home'); var d3demo = require('./routes/d3demo'); var PersonProvider = require('./public/javascripts/personProvider').PersonProvider; var personProvider = new PersonProvider('localhost', 27017); var LinkProvider = require('./public/javascripts/linkProvider').LinkProvider; var linkProvider = new LinkProvider('localhost', 27017); var http = require('http'); var path = require('path'); var app = express(); //============================================================================= // EXPRESS SETUP //============================================================================= app.configure(function(){ app.set('port', process.env.PORT || 2000); app.set('views', __dirname + '/views'); app.set('view engine', 'jade'); app.use(express.favicon()); app.use(express.logger('dev')); //app.use(require('connect').bodyParser()); app.use(express.bodyParser()); app.use(express.methodOverride()); app.use(app.router); app.use(require('stylus').middleware(__dirname + '/public')); app.use(express.static(path.join(__dirname, 'public'))); }); app.configure('development', function () { app.use(express.errorHandler({ dumpExceptions: true, showStack: true })); }); app.configure('production', function () { app.use(express.errorHandler()); }); //============================================================================= // ROUTING //============================================================================= app.get('/home', function (req, res) { home.homeGet(req, res, commonHelper, personProvider, linkProvider); }); app.post('/home', function (req, res) { home.homePost(req, res, personProvider); }); var server = http.createServer(app); server.listen(app.get('port'), function(){ console.log("Express server listening on port " + app.get('port')); }); 

这是主页路线

 /* * GET home page. */ exports.homeGet = function(req, res, commonHelper, personProvider, linkProvider){ commonHelper.seedData(personProvider, linkProvider, function() { res.render('home'); }); }; exports.homePost = function (req, res, personProvider) { var newUserEmail = req.body.email; console.log(req.body.length); //console.log(x); //var email = req.param('Email'); console.log("/Home posted Email :" + newUserEmail); personProvider.save({ //email: req.param('Email'), email: newUserEmail, }, function (error, docs) { if(error == null) { res.redirect('/d3demo'); } else { res.render('home'); } }); }; 

这是玉的观点

 extends layout block head link(rel='stylesheet', href='/stylesheets/home.css') script(src='/javascripts/home.js') block content form(method='post', id='homeForm', action='http://localhost:2000/home') div(id='dialog', title='error', style='display:none;') p You need to supply a valid email div(id='NewDetailsArea') p Enter your email address, and then click enter | <input type="text" id="email" class="email"></input> div#homeSubmit input(type='submit', value='Enter', id='enterEmail') 

这被渲染到这

 <form method="post" id="homeForm" action="http://localhost:2000/home"> <div id="dialog" title="error" style="display:none;"> <p>You need to supply a valid email</p></div> <div id="NewDetailsArea"> <p>Enter your email address, and then click enter </p> <input type="text" id="email" class="email"> </input><div id="homeSubmit"><input type="submit" value="Enter" id="enterEmail"> </div> </div> </form> 

所以问题是:

那么问题其实很简单。 在function内

homePost =函数(req,res,personProvider)

我希望能够获得“电子邮件”表单字段的价值

我已经尝试了req.param('email'),req.body.email我已经尝试了标准express.bodyParser()和连接(有人在另一个答案中提到)一个需要('连接')。bodyParser() ,但唉,我所得到的是不确定的。

另外,如果我尝试和console.log(req.body)我得到未定义

我究竟做错了什么?

您需要为电子邮件input提供一个name属性。 这个name是表单提交时发送的:

 <input type="text" id="email" name="email" class="email">