jQuery + node.js表示POST请求

我试图发送一个发布请求到节点服务器。 这是我的客户端代码:

function send(userid,message){ $.ajax({ method: "POST", url: "/chat/messages?id="+userid+'&message='+message }) clear(); } 

这是我的服务器端代码:

  app.post('/chat/messages',function (req,res){ var query = url.parse(req.url,true).query insertMessage(query.id,query.message) }) 

这工作,但是我不确定使用邮政在查询string中获取数据是正确的路要走。

我试图在$ajax参数中添加一个数据字段:

 function send(userid,message){ $.ajax({ method: "POST", url: "/chat/messages" data : {'id' : userid, 'message' : message} }) clear(); } 

在服务器端使用bodyParser()来parsing主体内容:

 app.use(bodyParser.json()) app.post('/chat/messages',function (req,res){ console.log(req.body) }) 

但是当我logging响应时, body{ }对象总是空的。 这是为什么? POST请求需要一个<form>标签吗?

我尝试编辑我的ajax请求使用json作为dataType和string的数据,但req.body仍然是空的。

 $.ajax({ method: "POST", url: "/chat/messages", data : JSON.stringify({'id' : userid, 'message' : message}), dataType: 'json', }) 

当您将数据发布到服务器时,数据通常会被urlencoded并添加到请求的主体中。 在你的例子中,它看起来像这样:

 id=<userid>&message=<message> 

因此,你需要能够parsing的bodyparser.urlencoded()bodyparser.urlencoded()

 app.use(bodyParser.urlencoded()) 

请注意,它并不总是urlencoded,这一切都取决于你用来发送post。 例如,AngularJS默认将其作为json发送。 好消息是,你可以简单地添加bodyparsers,你的路由不需要知道使用哪种方法,因为在这两种情况下,数据最终都会以包含键/值对的req.body结尾。

您应该阅读快速文档。 http://expressjs.com/api.html#req

 // For regular html form data app.use(bodyParser.urlencoded()) app.post('/chat/messages',function (req,res){ console.log(req.body); console.log(req.query.id); console.log(req.query.messages); }) 

你也可以做req.params

 app.post('/chat/messages/:id',function (req,res){ console.log(req.body); console.log(req.query); console.log(req.params.id) })