确定2.6发布数据

我只是开始尝试Restify(和一般的NodeJS),并且我有一些麻烦来获取用户的POST数据。

我有一个基本的节点应用程序。 在文档和一些博客文章,我读它就像使用queryParser一样简单,但它不工作。 我认为问题出在我的CURL命令上。

节点App:

var restify = require('restify'); function userCreation(request, result, next) { console.log(request.body); console.log(request.query); console.log(request.params); result.send({ name: request.params.name }); return next(); } var server = restify.createServer({ version: '1.0.0' }); server.use(restify.gzipResponse()); server.use(restify.queryParser()); server.post({ path: '/users', versions: ['1.0.0'] }, userCreation); server.listen(8080, function() { console.log('%s listening at %s', server.name, server.url); }); 

CURL命令:

 curl -is -X POST -H 'accept-version: 1.0.0' -d '{ "name": "John" }' http://127.0.0.1:8080/users curl -is -X POST -H 'accept-version: 1.0.0' -d 'name=John' http://127.0.0.1:8080/users 

答复是:

 HTTP/1.1 200 OK Content-Type: application/json Content-Length: 2 Date: Fri, 01 Nov 2013 09:40:08 GMT Connection: keep-alive {} 

而节点日志是:

 restify listening at http://0.0.0.0:8080 undefined {} {} 

希望有人能帮助我:)

凯文

使用bodyParser而不是queryParser

为了处理在您的RESTful服务中通过HTTP POST请求发送的JSON文档,您将需要:

  1. 在你的服务中使用bodyParser
  2. 确保在提交HTTP POST请求时包含HTTP头“Content-Type:application / json”

你的CURL命令应该是这样的:

curl -is -X POST -H“Content-Type:application / json”-H“accept-version:1.0.0”-d“{”name“:”John“}' http://127.0.0.1:8080 /用户

您的Restify服务代码:

 var restify = require('restify'); function userCreation(request, result, next) { console.log(request.body); result.send({ name: request.body.name }); return next(); } var server = restify.createServer({ version: '1.0.0' }); server.use(restify.gzipResponse()); server.use(restify.bodyParser()); server.post({ path: '/users', versions: ['1.0.0'] }, userCreation); server.listen(8080, function() { console.log('%s listening at %s', server.name, server.url); });