2014-06-28 151 views
0

如何在不对字符串中的路径进行硬编码的情况下获取文件的绝对路径?如何获得Vert.x的绝对路径?

所以基本上我要求Vert.x的版本的PHP的$_SERVER['DOCUMENT_ROOT']。有人知道吗?


UPDATE
我有以下目录结构:

| app.coffee 
| Views 
    -| foo.html 

app.coffee:

vertx = require('vertx') 
rm = new vertx.RouteMatcher() 

rm.get '/', (req) -> 
    req.response.sendFile "Views/foo.html" 

vertx.createHttpServer().requestHandler(rm).listen(8080) 

回答

1

听起来你正在寻找应用程序的执行目录。要获得执行目录,只需查看系统属性的用户即可。DIR”像这样:

System.getProperty("user.dir") 

因此,举例来说,当我为静态文件vertx测试我使用这个:

val staticFilePath = container.config().getString("static_files", System.getProperty("user.dir")); 
    server.requestHandler(
    { 
    request: HttpServerRequest => { 
     request.response().sendFile(staticFilePath + "/something.css") 
    } 
    } 

如果您仍然没有得到想要的结果刚刚打印出来的用户。 dir属性以查看您尝试从中提供文件的位置。

参考文献:

+0

是的!那正是我期待的!谢谢凯文。 – Stephan

+0

没问题。乐意效劳。 –

0

工作目录只需键入相对路径,它会参考你启动了vertx命令。

看看这个简单的例子:

$ ls 
index.html verticle.scala 

正如你所看到的,我有一个verticle在我的(不明!)目录中的静态文件。

$ cat index.html 
Hello! 

$ cat verticle.scala 
vertx.createHttpServer().requestHandler({ req: HttpServerRequest => 
    req.response().sendFile("index.html") // <-- relative path! 
}).listen(8080) 

现在我只是从这里

$ vertx run verticle.scala 
Compiling verticle.scala as Scala script 
Starting verticle.scala 
Succeeded in deploying verticle 

运行它,它只是工作,根本不需要像在PHP :)

$ curl localhost:8080 
Hello! 

享受指定的常量!

+0

这是我尝试过,但相对路径似乎并没有为我工作。或者我只是做错了。检查我更新的问题。 – Stephan

0

我敢打赌,你现在要做的

curl http://localhost:8080/foo.html 

,因为你的路线匹配配置为匹配不能工作/与foo.html的内容作出回应。

正确的测试用例应该是相反:

curl http://localhost:8080/ 

和预期的结果应该是

Hello! 

路由匹配是不是可以提供静态文件错误的工具。如果你打算这样做,请参阅web server module

UPDATE

伴侣,这件事情在CoffeeScript的工作对我来说太。您使用的是什么Vert.x版本?

$ vertx version 
2.1 (built 2014-05-27 12:39:02) 
$ cat app.coffee 
vertx = require('vertx') 
rm = new vertx.RouteMatcher() 

rm.get '/', (req) -> 
    req.response.sendFile "Views/foo.html" 

vertx.createHttpServer().requestHandler(rm).listen(8080) 
$ vertx run app.coffee & 
[1] 27731 
$ Succeeded in deploying verticle 

$ curl localhost:8080 
ciao 
$ cat Views/foo.html 
ciao 
+0

再次感谢您的快速回答。但我知道routeMatcher的工作原理。当我curl -i http:// localhost:8080 /'我得到一个404:'找不到资源'。我已阅读文档,我已经尝试过这些示例,但相对路径似乎不适用于我。但是,当我提供绝对路径时,它_does_工作。这就是为什么我想知道如何获取当前文件的路径,以防止硬编码。 – Stephan

+0

您可以使用您的程序的Javascript翻译版本复制此内容吗? – sscarduzio

相关问题