vertx获取简单的帖子请求的主体

时间:2017-02-11 14:46:24

标签: vert.x

他们的doc on vertx website isn't quite clear on how to receive the body of a request

var vertx = Vertx.vertx();
var server = vertx.createHttpServer();
var Router = require("vertx-web-js/router");
var BodyHandler = require("vertx-web-js/body_handler");


var router = Router.router(vertx);


router.route().handler(BodyHandler.create().handle);

router.route('POST', "/a").handler(function (routingContext) {
  var response = routingContext.response();
  response.setChunked(true);
  response.write("a json received");
  var str = routingContext.getBodyAsJson()
  console.log(str);
  // Now end the response
  routingContext.response().end();
});

我收到错误:

 vertx-js/util/console.js:9 ReferenceError: "inspect" is not defined

如果他们甚至没有把它放在他们的文档中,我该怎么知道该怎么称。

2 个答案:

答案 0 :(得分:4)

Paulo说我的vertx版本已经过时,这是一个错误。我会接受他的话。与此同时,我尝试用Java编写,就像我得到的答案一样。但是我做得更成功了:

   router.route().handler(BodyHandler.create());


   router.route(HttpMethod.POST, "/iamonline").handler(rc -> {
        JsonObject json = rc.getBodyAsJson();
        System.out.println(json.getString("id"));
        HttpServerResponse response = rc.response();
        response.putHeader("content-type", "application/json");

        // Write to the response and end it
        response.end("{\"status\": 200}");
    });

答案 1 :(得分:1)

我第一次碰到了同样的事。使用.bodyHandler这是一种方便的方法,可以整体接收整个请求正文。

作为参考,我将在Java中给你一个例子(你可以很容易地将它“转换”成ECMAScript):

public void login(final RoutingContext routingContext) {
  routingContext.request().bodyHandler(bodyHandler -> {
    final JsonObject body = bodyHandler.toJsonObject();
    // `body` now contains you what you POST'ed
  });
}