Vert.x的POST请求与JavaScript有什么区别?

时间:2016-09-17 09:46:16

标签: javascript java post vert.x

我有vert.x应用程序。在我的Verticle中,我有这样的路线来执行后请求:

router.post("/api/1").handler(routingContext -> {
            HttpServerResponse response = routingContext.response();
            response
                    .putHeader("content-type", "text/html")
                    .end("Response from api");
        });

好的,我想测试这个请求。

为此,我创建了单元测试:

@Test
    public void testApi1(TestContext context) {
        Async async = context.async();
        HttpClient client = vertx.createHttpClient();
        HttpClientRequest request = client.post(8080, "localhost", "api/1", response -> {

            System.out.println("Some callback " + response.statusCode());
            async.complete();

        });
        String body = "{'username':'www','password':'www'}";
        request.putHeader("content-length", "1000");
        request.putHeader("content-type", "application/x-www-form-urlencoded");
        request.write(body);
        request.end();
    }

但是当我尝试执行此测试时,我总是得到404错误。为了定义这个我使用Postman(REST-client)的原因。它使用以下请求:

POST /api/1 HTTP/1.1
Host: localhost:8080
Cache-Control: no-cache
Postman-Token: 6065383d-8f51-405c-08fd-9cc824a22f92
Content-Type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW

此请求也返回404。

很奇怪。

所以我决定用JavaScript创建简单的post-request - 我使用了非常简单的JQuery代码:

$.post("/api/1");

它返回正确的字符串,我期待。

谁能解释我这三个问题之间的区别。

1 个答案:

答案 0 :(得分:2)

在你的 HttpClientRequest request = client.post(8080, "localhost", "api/1", response -> { ...

你错过了" /"在一开始,它应该是:

HttpClientRequest request = client.post(8080, "localhost", "/api/1", response -> { ...