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">