2017-05-12 1 views
0

J'ai la classe Verticle suivante:vert.x Serve fichiers statiques

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()); 
       } 
      } 
    ); 
    } 
} 

Mon fichier html est:

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

je "StaticHandler.create ..." afin de servir tous fichiers statiques dans le dossier du client. Comme vous pouvez le comprendre, je veux qu'une fois que le serveur reçoit une requête GET à "localhost: 3000/hello", le client recevra une page HTML, qui appellera le fichier app.js.

Malheureusement, je ne peux pas le faire. index.html est chargé et le navigateur ne peut pas charger app.js.

Il est important de noter que index.html et app.js se trouvent exactement dans le même chemin que $ {PROJECT_ROOT}/client.

Le code se trouve cependant dans: $ {PROJECT_ROOT}/src/main/java/com/company.

Répondre

0

Pourquoi ne pas essayer quelque chose straight-forward comme:

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

désolé. Ça ne marche toujours pas. Cela a-t-il fonctionné pour vous? – CrazySynthax

+0

imprimez les chemins et vérifiez s'ils correspondent à votre fichier. Vous pouvez également vérifier l'existence des fichiers – injecteer

+0

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

2

Vous simplement manqué le signe étoile lorsque vous défini votre gestionnaire statique:

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

Je l'ai essayé. Cela n'a pas fonctionné pour moi. – CrazySynthax