2017-05-12 1 views
0

Ich habe folgende Verticle Klasse:Vert.x dienen statische Dateien

public class SendFileExample extends AbstractVerticle { 

    public void start(Future<Void> fut) throws Exception { 
     Router router = Router.router(vertx); 
     router.route("/hello").handler(StaticHandler.create("client")); 

     router.route("/hello").handler(routingContext -> { 
      HttpServerResponse response = routingContext.response(); 
      System.out.println("Hello"); 
      response.sendFile("client/index.html"); 
     }); 

     vertx.createHttpServer().requestHandler(router::accept).listen(3000, 
      result -> { 
       if (result.succeeded()) { 
        fut.complete(); 
       } else { 
        fut.fail(result.cause()); 
       } 
      } 
    ); 
    } 
} 

Meine HTML-Datei ist:

<html> 
<head> 
    <title> hello </title> 
</heade> 
<body> 
    <h1> Hello World </h1> 
    <button> Hello </button> 
    <script src="app.js"></script> 
</body> 
</html> 

I "StaticHandler.create ..." verwendet, um alle zu dienen statische Dateien im Client-Ordner. Wie Sie verstehen, möchte ich, dass sobald der Server eine GET-Anfrage an "localhost: 3000/Hallo" bekommt, der Client eine HTML-Seite bekommen wird, die app.js Datei aufrufen wird.

Leider kann ich es nicht tun. index.html ist geladen und der Browser kann app.js nicht laden.

Es ist wichtig zu beachten, dass index.html und app.js beide genau im selben Pfad liegen, der $ {PROJECT_ROOT}/client ist. Der Code befindet sich jedoch unter: $ {PROJECT_ROOT}/src/main/java/com/company.

Antwort

0

Warum Sie etwas versuchen Sie nicht geradlinig wie:

if (req.path().equals("/")) { 
    res.sendFile("client/index.html"); 
}else{ 
    res.sendFile("client" + req.path()); 
} 
+0

sorry. Es funktioniert immer noch nicht. Hat es für dich funktioniert? – CrazySynthax

+0

Drucken Sie die Pfade aus und sehen Sie, ob sie zu Ihrer Datei passen. Sie können auch die Existenz der Dateien prüfen – injecteer

+0

'System.out.println (" path = "+ req.path());' – injecteer

2

Sie einfach den Sternzeichen verpasst, wenn Sie Ihre statischen Handler definiert:

router.route("/hello*").handler(StaticHandler.create("client")); 
+0

Ich habe es versucht. Es hat nicht für mich funktioniert. – CrazySynthax

Verwandte Themen