6

我有一个简单的表单,它使用 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输入有关的问题。这个问题的任何解决方案...?

谢谢提前!

4

5 回答 5

22

req.body由名称和值组成。

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

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

于 2013-03-10T18:07:22.627 回答
11

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

于 2013-07-09T19:58:30.553 回答
6

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

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

如果你想接收 json 输入

app.use(bodyParser.json());
于 2015-02-18T03:40:09.660 回答
0

就我而言,这是由于我的应用重定向httphttps. 更新 Facebook 以使用httpsuri 修复了它。

于 2014-01-16T01:37:22.750 回答
0

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

于 2020-04-20T15:48:31.060 回答