2017-10-18 102 views
0

我使用ResourceHandler在我的Web服務器上提供JavaScript文件。現在我想提供完全相同的javascript,但在我的url中接受/ {id},所以我可以在我的網站在handleRequest方法內執行POST請求時使用{id}。我嘗試了一個pathTemplate,但是當我嘗試訪問我的網站時,它說它無法找到我的一個js文件(如果我不使用pathTemplate,它會起作用)。隱藏路徑模板和資源處理程序

我能做些什麼才能使它工作?

+0

如果你分享了一些代碼,這將有所幫助! – aramaki

+0

呀還有沒有什麼真正顯示,除了2行的代碼在這裏^^」 – baskwo

回答

2

您可以定義兩條路線,一條用於控制器(用於接收發布數據),另一條用於提供您的確切JavaScript文件。

更爲標準的解決方案是擁有一條專用於服務所有資產(包括您的JavaScript應用程序)的路線。對於這一點,看看下面的回答:Routing template format for undertow

Undertow.builder().addHttpListener(8080, "0.0.0.0") 
    .setHandler(Handlers.path() 

    // Controllers 
    .addPrefixPath("/controller", Handlers.routing() 
     .post("/{id}", exchange -> { 
      String id = exchange.getQueryParameters().get("id").getFirst(); 
     })) 

    // Serve your file, preserving any route information 
    .addPrefixPath("/app.js", exchange -> { 
     Path p = Paths.get("/path/to/app.js"); 
     exchange.getResponseHeaders().put(Headers.CONTENT_TYPE, "application/javascript"); 
     exchange.getResponseSender().send(
      ByteBuffer.wrap(Files.readAllBytes(p)) 
    )}) 
).build().start(); 

有了這個例子,你的控制器將可在路線/控制器/ {ID}和你的JavaScript文件將直接送達。

請注意,這種服務文件的方式並不是最優的,它適用於文件不太大的情況。爲了更好地提供文件服務,可以使用Undertow的PathResource和PathResourceManager類。

+0

我可能有missaid我想 我想有一個路徑mywebsite.com/{id],這是‘入口’的東西。我的客戶將輸入他們自己的ID,我將提供給他們,然後在我的javascript中將其添加到我的帖子請求中。使用控制器/ {id}它會工作。我需要的只是第一部分,這就是我沒有找到如何做到這一點 – baskwo

+0

從我的例子,如果你讓一個HTTP請求到「/靜態/ 1234」,它會留在網址,以便您可以使用您的JavaScript抓住它邏輯。我還是不知道你是如何開始你的JavaScript文件的下載(從一些純的index.html?) – aramaki

+0

我只是嘗試,它似乎試圖訪問「/靜態/ 1234」子文件夾。 是的,我有一個html文件,我使用aurelia。所以我通過腳本標記在我的index.html中啓動我的JavaScript文件的下載。 現在,而不是/ 1234我在做#1234,它的工作原理,但我寧願做/ 1234比#1234。 – baskwo