如何使用Dart和shelf为动态和静态页面提供服务?
使用如何使用Dart和shelf为动态和静态页面提供服务?,dart,dart-shelf,Dart,Dart Shelf,使用shelf\u static通过Dart为静态网页提供服务没有问题: var staticHandler=createStaticHandler(staticPath,defaultDocument:'home.html'); service(staticHandler,'localhost',port)。然后((服务器){ 打印('服务于http://${server.address.host}:${server.port}'); }); 我可以使用shelf\u routefine来创
shelf\u static
通过Dart为静态网页提供服务没有问题:
var staticHandler=createStaticHandler(staticPath,defaultDocument:'home.html');
service(staticHandler,'localhost',port)。然后((服务器){
打印('服务于http://${server.address.host}:${server.port}');
});
我可以使用shelf\u route
fine来创建动态网页:
路由器路由=新路由器()
..get('/item/{itemid}',handler.doItem);
var handler=const shelf.Pipeline()
.addHandler(routes.handler);
service(处理程序,'localhost',端口)。然后((服务器){
打印('服务于http://${server.address.host}:${server.port}');
});
但我正在努力将静态处理程序添加到动态版本中。
我尝试过的事情包括:
路由器路由=新路由器()
…get('/item/{itemid}',handler.doItem)
..get('/',staticHandler);
或者
.get('/.*',staticHandler);
或者
.get('/{any}',staticHandler);
如果我请求http://localhost:8080/
但明确要求现有页面http://localhost:8080/home.html
给我找不到的信息
我甚至不应该尝试使用shelf\u static
来实现这一点吗?如果不是,正确的方法是什么?
谢谢 A
fallbackHandler
可以为路由器指定。在这里使用静态处理程序似乎解决了这个问题。
路由器路由=新路由器(fallbackHandler:staticHandler)
..get('/item/{itemid}',handler.doItem);
您可以使用。它创建一个处理程序链,如果前一个处理程序给出404或405响应,则移动到下一个处理程序
var staticHandler=createStaticHandler(staticPath,defaultDocument:'home.html');
var routes=新路由器()
…获取('/item/{itemid}',handleItem);
var handler=newcascade()
.add(staticHandler)
.add(routes.hander)
.handler;
service(处理程序,'localhost',端口)。然后((服务器){
打印('服务于http://${server.address.host}:${server.port}');
});
原因是货架路径
方法,如get
必须完全匹配路径。对于静态文件,您不需要精确匹配,因为路径的其余部分会告诉您文件的路径
为此,您需要使用add
方法并设置exactMatch:false
,因为当前的get
、post
等方法不公开exactMatch
以下作品
void main(列表参数){
Logger.root.onRecord.listen(打印);
var staticHandler=createStaticHandler(“../static”,defaultDocument:'home.html”);
最终根=路由器()
..get('/item/{itemid}',(请求)=>'处理项目')
…添加(“/”、[“获取”]、staticHandler、exactMatch:false);
打印路径(根);
io.service(root.handler,InternetAddress.ANY_IP_V6,9999);
}
仅供参考,我已经添加了一个更高级别的框架,称为,它是许多架子组件上的一层薄薄的粘合层,这使这变得更容易
这仍然是一种新的和缺乏记录,但如果你感兴趣,你可以做以下事情
void main(列表参数){
Logger.root.onRecord.listen(打印);
final app=mojito.init();
应用程序路由器
…get('/item/{itemid}',(String itemid)=>'处理项$itemid')
…addStaticAssetHandler(“/”,文件系统移情:“../static”,
defaultDocument:'home.html');
app.start();
}
addStaticAssetHandler
在后台调用createStaticHandler
,但也支持在开发模式下调用pub-service,这对于polymer之类的东西非常方便Ah-这比仅使用回退处理程序要好。杰出的