如何在不对字符串中的路径进行硬编码的情况下获取文件的绝对路径?
所以基本上我要求的是Vert.x版本的PHP $_SERVER['DOCUMENT_ROOT']
。有人知道吗?
的更新
我有以下目录结构:
| 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)
答案 0 :(得分:1)
听起来您正在寻找应用程序的执行目录。要获取执行目录,您可以像这样查找系统属性“user.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")
}
}
如果您仍未获得所需的结果,只需打印出user.dir属性,即可查看您尝试提供文件的位置。
参考文献:
答案 1 :(得分: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!
享受!
答案 2 :(得分:0)
我打赌你正在努力
curl http://localhost:8080/foo.html
这是行不通的,因为您的路由匹配器已配置为匹配/并响应foo.html的内容。
正确的测试用例应该是:
curl http://localhost:8080/
,预期结果应为
Hello!
路由匹配器不是提供静态文件的错误工具。如果您打算这样做,请参阅web server module
<强>更新强>
Mate,这件事对我来说也适用于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