繁体   English   中英

使用 Express node.js 接收带有 post 表单的 req.body 空

[英]Receiving req.body empty with post form with Express node.js

我有一个简单的表单,它使用 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由名称和值组成。

在搜索框中添加name="search"并重试。

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

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

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

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

如果你想接收 json 输入

app.use(bodyParser.json());

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM