【问题标题】:Passing form data not working in Express / Node.js传递表单数据在 Express / Node.js 中不起作用
【发布时间】:2015-10-01 00:43:56
【问题描述】:

对不起,如果这是一个补救问题,或者一个明显的错误,但这是我的第一个 Node 项目。

本质上,我需要做的是获取一行文本,用户将在前端的表单中输入该文本。不幸的是,无论我做什么,结果都会记录“未定义”。我不知所措。我将在下面发布完整的代码,但给我带来麻烦的部分是:

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

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

'/test' 路由只是临时测试获取表单响应(如果由于某种原因不明显)。

我的完整 HTML 文件如下所示:

<!DOCTYPE HTML>
<head></head>
<body>
    <form id="myform" action="/test" method="post" enctype="application/x-www-form-urlencoded">
        <input type="text" name="name" id="mytext" />
        <input type="submit" id="mysubmit" />
    </form>
</body>

任何想法/帮助将不胜感激。

这是完整的 app.js 文件

var app = require('express')();
var http = require('http').Server(app);
var exphbs  = require('express-handlebars');
var twitter = require('./twitter.js');
var hue = require("./hue_control.js");

//Variable that control Twitter Calls
var api = 'statuses/filter';
var params = {slug:'test', owner_screen_name: 'REDACTED', skip_status: true};
var values = {};

app.engine('handlebars', exphbs({defaultLayout: 'main'}));
app.set('view engine', 'handlebars');

hue.activate();
twitter.tweetStream(api, params, values);

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

app.post('/test',function(req,res){
    console.log(req.body); //you will get your data in this as object.
    console.log(req.is('json'));
});

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

app.get('/tweets', function(req, res){
    res.render('home', {   
        profileImg: values.profileImg,
        userName: values.userName,
        screenName: values.screenName,
        text: values.text,
        timeStamp: values.timeStamp,        
        tweetScore: values.tweetScore
    });
});



//app.get('/tweets', function(req, res)

http.listen(3000, function(){
    console.log('listening on *:3000');
});

【问题讨论】:

    标签: javascript node.js forms express


    【解决方案1】:

    我认为您在 express 应用程序中缺少 bodyParser 中间件,这就是未定义 req.body 的原因。

    如果您使用的是 Express 3.x,只需使用以下行。 BodyParser 曾经与 Express 4.0 之前的版本捆绑在一起

    app.use(express.bodyParser());
    

    如果您使用的是 Express 4.x,则需要明确要求 body-parser 模块

    var bodyParser = require('body-parser');
    

    然后在你的应用中使用它

    app.use(bodyParser());
    

    你的其他代码看起来不错。

    【讨论】:

    • 非常感谢。现在问题解决了。非常感谢您的帮助。干杯。
    【解决方案2】:

    您需要使用body-parser

    大致来说,这就是你所需要的:

    var app = require('express')();
    var http = require('http').Server(app);
    ...
    var bodyParser = require('body-parser')
    
    app.use(bodyParser.urlencoded({ extended: false }));
    ...
    

    【讨论】:

      猜你喜欢
      • 2011-11-23
      • 1970-01-01
      • 2014-07-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-15
      • 1970-01-01
      • 2018-12-11
      相关资源
      最近更新 更多