vertx获得一个简单的帖子请求的身体

问题描述:

他们的doc on vertx website isn't quite clear on how to receive the body of a requestvertx获得一个简单的帖子请求的身体

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 

我怎么知道该叫什么,如果他们不甚至把它自己的文档..

+0

你使用的是什么版本的vert.x?这看起来像一个3.3.3版固定的控制台对象实现的bug - https://github.com/vert-x3/vertx-lang-js/commit/2af2b50eb7493898e28e3ecc929ee21face71fc4。关于上面的代码,它似乎是正确的。 –

+0

@PauloLopes我确实使用较低版本我正在使用博客文章http://vertx.io/blog/vert-x3-says-hello-to-npm-users/ – Ced

保罗说我的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}"); 
    }); 

我遇到同样的第一次。使用.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 
    }); 
}