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.h‌​tml") 
        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.h‌​tml")
    Ok(Source.fromInputStream(stream).mkString("")).as("text/html")
  }
}
object FrontEndController {}

我将控制器“Application”的名称更改为“FrontEndController”,因为它是在任何API和静态文件已经过测试时将被调用的控制器,希望它不会混淆任何人。

随意指出任何不好的Scala实践! 我只是开始:)

链接地址: http://www.djcxy.com/p/64455.html

上一篇: Play Framework, routing with Angular [SCALA]

下一篇: java thread infinite loop,socket programming