使用Express node.js的post表单接收req.body为空。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用Express node.js的post表单接收req.body为空。相关的知识,希望对你有一定的参考价值。

我有一个简单的表单,通过Express向我的Node.JS服务器发送POST数据。这就是表单。

<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这是我在服务器上处理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 是由名字和值组成的

添加 name="search" 在你的搜索框上再试一次。

你还必须使用 expressconnect.bodyParser() 中间件,谢谢 Nick Mitchinson!

另一答案

我遇到了这个问题,原来我使用的是 app.use(express.bodyParser()); 但它是在我使用的代码之后。把它移上去就解决了这个问题。

另一答案

特快4 会是这个。(注意,这不会解析多文件上传)。

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

如果你想接收json输入

app.use(bodyParser.json());
另一答案

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

另一答案

在我的例子中,我没有提供像这样的名称标签。name="firstname" 在我 input 领域。添加它们后,一切正常。

以上是关于使用Express node.js的post表单接收req.body为空。的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Express 和 Node.js 从表单发送参数

Node.js - 提交表单

Node.js 和 Express 排除路由表单 JWT 中间件

在 Node.JS 中获取 http post 表单数据

node.js,express - 在循环中以同步方式一个接一个地执行mysql查询

node.js+express+mongoose实现用户增删查改案例