6

我刚开始尝试 Restify(和一般的 NodeJS),但在获取用户 POST 数据时遇到了一些麻烦。

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

节点应用:

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 -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
{}
{}

希望有人可以帮助我:)

凯文

4

2 回答 2

2

使用bodyParser而不是queryParser

于 2015-01-16T13:42:48.380 回答
1

为了在 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);
});

祝你好运!

于 2015-03-22T07:15:40.677 回答