访问资源中的 scala.js 输出
Accessing scala.js output in resources
我正在尝试使用 scala.js、scalatags、akka-http 和 mill 作为我的构建工具来构建应用程序服务器。一切顺利,直到浏览器尝试使用生成的 scala.js 代码查找脚本。这是成功构建并引用编译的 scala.js 代码的 scalatags 代码(HiPage.js - 在 mill 中作为 ScalaJSModule 构建)。当它是 运行 时,下面的 println 打印出来:
文件:/Users/nnovod/projects/lims/LIMS/resources/HiPage.js
这确实是我放置 scala.js
的 javascript 输出的地方
object HiPage {
val boot =
"Hi().main(document.getElementById('contents'))"
println(getClass.getResource("/HiPage.js").toString)
val skeleton =
html(
head(
script(`type`:="text/javascript", src:="/HiPage.js"),
link(
rel:="stylesheet",
href:="https://cdnjs.cloudflare.com/ajax/libs/pure/0.5.0/pure-min.css"
)
),
body(
onload:=boot,
div(id:="contents")
)
)
}
最终在浏览器中显示如下:
<html>
<head>
<script type="text/javascript" src="/HiPage.js"></script>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/pure/0.5.0/pure-min.css"/>
</head>
<body onload="Hi().main(document.getElementById('contents'))">
<div id="contents"></div>
</body>
</html>
这是我的 akka-http 路由...
val route =
path("hello") {
get {
complete(
HttpEntity(
ContentTypes.`text/html(UTF-8)`,
HiPage.skeleton.render
)
)
}
}
浏览器永远找不到 HiPage.js(“无法加载资源:服务器响应状态为 404(未找到)”)。 HiPage.js 位于顶级资源目录中,由代码中的 println(getClass.getResource("/HiPage.js").toString) 找到。当浏览器从服务器请求它时,我必须做什么才能看到它?
不确定这是否是最好的方法,但我最终解决了这个问题,方法是让脚本中的所有 src 引用都以 /resource 开头,然后编辑我的 akka-http 路由以包含以下内容:
pathPrefix("resource") {
extractUnmatchedPath { unmatched =>
val resource = unmatched.toString()
if (!resource.startsWith("/"))
reject()
else
getFromResource(resource.substring(1))
}
}
我正在尝试使用 scala.js、scalatags、akka-http 和 mill 作为我的构建工具来构建应用程序服务器。一切顺利,直到浏览器尝试使用生成的 scala.js 代码查找脚本。这是成功构建并引用编译的 scala.js 代码的 scalatags 代码(HiPage.js - 在 mill 中作为 ScalaJSModule 构建)。当它是 运行 时,下面的 println 打印出来: 文件:/Users/nnovod/projects/lims/LIMS/resources/HiPage.js 这确实是我放置 scala.js
的 javascript 输出的地方object HiPage {
val boot =
"Hi().main(document.getElementById('contents'))"
println(getClass.getResource("/HiPage.js").toString)
val skeleton =
html(
head(
script(`type`:="text/javascript", src:="/HiPage.js"),
link(
rel:="stylesheet",
href:="https://cdnjs.cloudflare.com/ajax/libs/pure/0.5.0/pure-min.css"
)
),
body(
onload:=boot,
div(id:="contents")
)
)
}
最终在浏览器中显示如下:
<html>
<head>
<script type="text/javascript" src="/HiPage.js"></script>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/pure/0.5.0/pure-min.css"/>
</head>
<body onload="Hi().main(document.getElementById('contents'))">
<div id="contents"></div>
</body>
</html>
这是我的 akka-http 路由...
val route =
path("hello") {
get {
complete(
HttpEntity(
ContentTypes.`text/html(UTF-8)`,
HiPage.skeleton.render
)
)
}
}
浏览器永远找不到 HiPage.js(“无法加载资源:服务器响应状态为 404(未找到)”)。 HiPage.js 位于顶级资源目录中,由代码中的 println(getClass.getResource("/HiPage.js").toString) 找到。当浏览器从服务器请求它时,我必须做什么才能看到它?
不确定这是否是最好的方法,但我最终解决了这个问题,方法是让脚本中的所有 src 引用都以 /resource 开头,然后编辑我的 akka-http 路由以包含以下内容:
pathPrefix("resource") {
extractUnmatchedPath { unmatched =>
val resource = unmatched.toString()
if (!resource.startsWith("/"))
reject()
else
getFromResource(resource.substring(1))
}
}