vertx获得一个简单的帖子请求的身体
问题描述:
他们的doc on vertx website isn't quite clear on how to receive the body of a request。vertx获得一个简单的帖子请求的身体
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
我怎么知道该叫什么,如果他们不甚至把它自己的文档..
答
保罗说我的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
});
}
你使用的是什么版本的vert.x?这看起来像一个3.3.3版固定的控制台对象实现的bug - https://github.com/vert-x3/vertx-lang-js/commit/2af2b50eb7493898e28e3ecc929ee21face71fc4。关于上面的代码,它似乎是正确的。 –
@PauloLopes我确实使用较低版本我正在使用博客文章http://vertx.io/blog/vert-x3-says-hello-to-npm-users/ – Ced