我想在我的播放应用中提供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"
但它不再可用:(
答案 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)。因此,如果您使用节点模块构建一些目录,并且您希望用户查看或下载文件,则只需翻转参数(假设文件附件由浏览器正常显示“你想要下载此文件的提示”。