【问题标题】:Receiving req.body empty with post form with Express node.js使用 Express node.js 接收带有 post 表单的 req.body 空
【发布时间】:2013-02-25 16:37:09
【问题描述】:

我有一个简单的表单,它使用 Express 将 POST 数据发送到我的 Node.JS 服务器。这是表格:

<form method="post" action="/sendmessage">
  <div class="ui-widget">
      <input type="text" id="search" data-provide="typeahead" placeholder="Search..." />
  </div>
  <textarea id="message"></textarea>
</form>

ui-widget 和输入与typehead 相关,这是一个来自 Twitter 的自动完成库。 这就是我在服务器中处理 POST 请求的方式:

app.post('/sendmessage', function (req, res){

  console.log(req.body);

  usermodel.findOne({ user: req.session.user }, function (err, auser){

        if (err) throw err;

        usermodel.findOne({ user: req.body.search }, function (err, user){

            if (err) throw err;

             var message = new messagemodel({

                  fromuser: auser._id,
                  touser: user._id,
                  message: req.body.message,
                  status: false

             });

             message.save(function (err){

                  if (err) throw err;

                  res.redirect('/messages')

             })

        });

   });

});

控制台显示“{}”,然后出现 req.body.search 错误,因为未定义 search。我不知道这里发生了什么,这不是与typehead 输入相关的问题。这个问题有什么解决办法...?

感谢您的提前!

【问题讨论】:

  • 我会在任何地方添加控制台检查以检查 req.body 输出的内容,如果 req.body 为空,那么我会查看您传递给 @987654329 的方式/内容有什么问题@
  • 尝试将name="search" 属性添加到您的输入字段。

标签: forms node.js post express


【解决方案1】:

就我而言,我没有在input 字段中提供像name="firstname" 这样的名称标签。添加它们后,一切正常。

【讨论】:

    【解决方案2】:

    express 4 上就是这个。 (请注意,这不会解析多部分/上传)。

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

    如果你想接收 json 输入

    app.use(bodyParser.json());
    

    【讨论】:

      【解决方案3】:

      在我的情况下,这是由我的应用程序将 http 重定向到 https 引起的。 更新 Facebook 以使用 https uri 修复了它。

      【讨论】:

        【解决方案4】:

        我遇到了这个问题,结果我使用的是app.use(express.bodyParser());,但这是在我使用的代码之后。向上移动解决了这个问题。

        【讨论】:

        • 非常重要的答案 - Express 对 app.use() 配置对象中任何内容的位置非常挑剔。我遇到了 app.use(express.bodyParser()) 不起作用的问题,因为我是从外部文件声明我的路由,并在调用 app.use(express.bodyParser()) 之前对其进行初始化
        • 谢谢,这正是我的问题 :)
        【解决方案5】:

        req.body 由名称和值组成。

        在您的搜索框中添加name="search",然后重试。

        您还必须使用 express/connect.bodyParser() 中间件,感谢 Nick Mitchinson!

        【讨论】:

        • 另外,我会确保您使用了 Express/Connect bodyParser。如果没有,Express 将不会填充 req.body 对象。
        • 我一直在想为什么,我的 request.body 是空的,然后意识到我的输入应该有名字。经典傻瓜:D。谢谢你..
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-04-30
        • 2017-07-29
        • 1970-01-01
        • 2011-11-23
        • 2017-07-25
        • 2021-03-08
        • 1970-01-01
        相关资源
        最近更新 更多