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

MrM*_*ado 5 forms post node.js express

我有一个简单的表单,它使用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>
Run Code Online (Sandbox Code Playgroud)

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')

             })

        });

   });

});
Run Code Online (Sandbox Code Playgroud)

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

谢谢你的进步!

Ari*_*rad 20

req.body 由名称和价值组成.

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

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

  • 另外,我会确保您使用了Express/Connect bodyParser.如果没有,Express将不会填充req.body对象. (2认同)

wes*_*bos 11

我遇到了这个问题,事实证明我正在使用app.use(express.bodyParser());它,但它是在我使用的代码之后.提升它解决了这个问题.

  • 非常重要的答案 - Express对于app.use()配置对象中的任何位置非常有用.我遇到了app.use(express.bodyParrser())无效的问题,因为我从外部文件声明了我的路由,并在调用app.use(express.bodyParser()之前初始化它们 (7认同)
  • 谢谢,这正是我的问题:) (2认同)

小智 6

对快递4将是这一个.(请注意,这不会解析multipart/uploads).

app.use(bodyParser.urlencoded({extended: true}));
Run Code Online (Sandbox Code Playgroud)

如果你想接收json输入

app.use(bodyParser.json());
Run Code Online (Sandbox Code Playgroud)