【问题标题】:Node.js express post parameters always undefinedNode.js express post 参数总是未定义
【发布时间】:2012-12-04 08:41:02
【问题描述】:

我是 Node.js 开发的新手,我知道已经有几个类似的堆栈溢出问题,不幸的是,似乎没有一个可以解决我的问题。所以我觉得我能做的就是问我的问题

所以我将 Node.js 与 Express 和 Jade 视图引擎一起使用。

我的一些代码基于这篇文章: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>

那么问题来了:

这个问题其实很简单。函数内

homePost = 函数 (req, res, personProvider)

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

我已经尝试过 req.param('email')、req.body.email 我已经尝试过标准 express.bodyParser() 以及 connect(有人在另一个答案中提到)一个 require('connect')。 bodyParser(),但是我得到的只是未定义的。

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

我做错了什么?

【问题讨论】:

    标签: javascript html forms node.js express


    【解决方案1】:

    您需要为电子邮件输入提供name 属性。 name 是提交表单时发送的内容:

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

    【讨论】:

    • 我现在无法尝试这个,因为它在我的笔记本电脑上,所以我必须等到今晚才能投票,如果它是正确的答案。听起来是这样。如果是的话,非常感谢。
    • 再看一遍。男孩,我觉得自己很愚蠢,这太明显了。呵呵
    猜你喜欢
    • 1970-01-01
    • 2021-01-05
    • 1970-01-01
    • 2018-11-07
    • 1970-01-01
    • 1970-01-01
    • 2017-09-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多