Routes 飞镖http://pub.dartlang.org/packages/route

Routes 飞镖http://pub.dartlang.org/packages/route,routes,dart,Routes,Dart,我已经开始尝试Dart和Route软件包 两个问题立即出现: 1) 当用户将浏览器指向不应该存在的url时(例如,通过提供错误的哈希片段),是否可能(如果惯用的方式是什么)定义回退路由。在示例代码中,路由框架只会引发一个ArgumentError(“找不到$path的处理程序”) 2) dart编辑器不在根路径/处为编译后的应用程序提供服务,而是在从文件系统目录派生的路径下提供服务。这使得测试路由框架成为可能。有没有可能让应用程序使用,比如说,localhost:3030/?1)我不知道有什么好

我已经开始尝试Dart和Route软件包

两个问题立即出现:

1) 当用户将浏览器指向不应该存在的url时(例如,通过提供错误的哈希片段),是否可能(如果惯用的方式是什么)定义回退路由。在示例代码中,路由框架只会引发一个
ArgumentError(“找不到$path的处理程序”)

2) dart编辑器不在根路径
/
处为编译后的应用程序提供服务,而是在从文件系统目录派生的路径下提供服务。这使得测试路由框架成为可能。有没有可能让应用程序使用,比如说,
localhost:3030/

1)我不知道有什么好方法可以做到这一点。您可以侦听每个url(*),然后手动检查$path是否与其他url匹配,但这有点混乱:

var homeUrl=newurlpattern(r'/home');
var contactUrl=新的URL模式(r'/contact');
var router=新路由器()
…addHandler(新的url.UrlPattern(r'(.*)),匹配页面)
…听();
无效匹配页(字符串路径){
if(homeUrl.matches(路径)){
//处理主页显示
}else if(contactUrl.matches(路径)){
//联系页面
}否则{
//不匹配,按你的意愿处理
}
}
如果有一种在客户端处理默认路由的内置方式,那就太好了

2) Justin Fagnani(Route包的作者)说,您可以从单独的Web服务器(即不是Dart编辑器提供的Web服务器)为应用程序提供服务,也可以使用与文件系统路径匹配的路由:(*)#无论URL是localhost:3030/#article还是C:/Dart/app/web//out/#article,article都将与article正确匹配。Github上有一个公开问题:

关于第2点:
你可以像下面这样做吗
url的可变部分由“window.location.pathname”设置

库url;
导入“dart:html”;
导入“package:route/client.dart”;
最后一个字符串_pathName=window.location.pathName;
final UrlPattern_base=新的UrlPattern(${u路径名});
final UrlPattern home=新的UrlPattern(${u路径名}{home”);
final UrlPattern page2=新的UrlPattern(${u路径名}}#page2”);
//真的很重要!允许保留“#”un url
//允许书签在浏览器关闭并重新打开时有效。
最终路由器=新路由器(useFragment:true)
//重定向/到/#home(home-UrlPattern)的简单方法
..addHandler(_base,()=>window.location.hash=“#home”);
main(){
路由器..addHandler(主页、showHome)
…addHandler(第2页,显示第2页)
…听();
}
void showHome(字符串路径){
查询(“正文”)。子项
…清除()
…添加(new Element.html(“Home”);
}
void showPage2(字符串路径){
查询(“正文”)。子项
…清除()
…添加(new Element.html(“第2页”);
}
1)从外观上看,服务器端有一个“defaultStream”,但我在客户端没有看到您提到的任何内容。可能会引起错误?