2017-02-11 130 views
1

他們的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

回答

0

保羅說我的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

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