Play Framework,使用Angular进行路由[SCALA]
我正在开发一个Play Framework / Angular项目,其中我的Play Framework服务器是一个只能由API用于在数据库中获取/发送/管理JSON的REST服务,我的Angular用于客户端。
我试图让他们独立,能够让他们在不同的机器上。
我的问题是路由:Play Framework尝试执行所有路由,如果某些内容不匹配,则会抛出错误,但我希望在没有其他匹配的情况下使用Angular路由(当模板,/ api,静态文件是不匹配)
在堆栈溢出时,我发现这个线程:匹配所有人的播放框架路由该人遇到与我完全相同的问题,但使用Java解决方案是在文件末尾有一个匹配其他任何内容的路由:
GET /*path controllers.Application.matchAll(path)
我的问题来自于为控制器提供的代码是Java的事实:
public class Application extends Controller {
public static Result matchAll(String path) {
return ok(Application.class.getResourceAsStream("/public/index.html")).as("text/html");
}
}
这是我在Scala中的尝试:
object Application extends Controller {
def matchAll(path: String) {
val stream = Application.getClass.getClassLoader.getResourceAsStream("/public/layout.html")
Ok(stream).as("text/html");
}
}
所以编译时出现错误:
"Cannot write an instance of java.io.InputStream to HTTP Response"
我在网上找到了其他的解决方案,但是他们使用PlayFramework来路由索引......这使得它们不那么独立,所以我认为这个“Java解决方案”仍然是最好/最快的方法,我无法弄清楚Scala等价物。
感谢您的阅读,我希望这篇文章对别人有所帮助
尝试使用来源:
Ok(Source.fromInputStream(stream).mkString("")).as("text/html")
@Salem有一个很好的答案(在这里)来解决我的编译问题。 之后我必须做出一些改变才能使其发挥作用。 这是完整的代码!
package controllers
import play.api.mvc._
import scala.io.Source
class FrontEndController extends Controller {
def matchAll(path: String) = Action {
val stream = FrontEndController.getClass.getClassLoader.getResourceAsStream("/public/layout.html")
Ok(Source.fromInputStream(stream).mkString("")).as("text/html")
}
}
object FrontEndController {}
我将控制器“Application”的名称更改为“FrontEndController”,因为它是在任何API和静态文件已经过测试时将被调用的控制器,希望它不会混淆任何人。
随意指出任何不好的Scala实践! 我只是开始:)
链接地址: http://www.djcxy.com/p/64455.html