Play Framework 2.5提供node_modules文件

时间:2016-03-20 13:47:58

标签: playframework

我想在我的播放应用中提供node_modules文件。

但是..当我这样做的时候:

路由

GET     /assets/*file                   controllers.Assets.versioned(path="/public", file: Asset)
GET     /node_modules/*file             controllers.Assets.at(path="/node_modules", file)

并在浏览器中输入http://localhost:9000/node_modules/angular2/animate.js

我收到错误页面。

以下是回复标题:

HTTP/1.1 404 Not Found
Content-Length: 5704
Content-Type: text/html; charset=utf-8
Date: Sun, 20 Mar 2016 13:35:58 GMT

请求

GET /node_modules/angular2/animate.js HTTP/1.1
Host: localhost:9000
Connection: keep-alive
Cache-Control: max-age=0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.37 Safari/537.36
Accept-Encoding: gzip, deflate, sdch
Accept-Language: pl-PL,pl;q=0.8,en-US;q=0.6,en;q=0.4

在之前的游戏版本中,我们可以通过以下方式告诉play将新文件夹视为资源文件夹:

playAssetsDirectories< + = baseDirectory /" node_modules"

但它不再可用:(

1 个答案:

答案 0 :(得分:1)

如果你不想搞乱Play中的资产/路由机制,有一种简单的方法可以实现这一点。在这里,我假设您的node_modules目录放在public目录旁边。

您创建的只是另一个控制额外资产的控制器:

package controllers;

import play.mvc.*;
import java.io.File;

public class NodeModulesController extends Controller {

    public Result at(String filePath) {
        File file = new File("node_modules/" + filePath);
        return ok(file, true);
    }
}

routes文件中,您可以像这样使用新创建的控制器:

GET     /node_modules/*file         controllers.NodeModulesController.at(file)

加分:在调用true方法时,您看到了ok()参数吗?这告诉文件是内联(true)还是发送为附件(false)。因此,如果您使用节点模块构建一些目录,并且您希望用户查看下载文件,则只需翻转参数(假设文件附件由浏览器正常显示“你想要下载此文件的提示”。