如何使用Dart和shelf来提供动态和静态页面? [英] How to serve both dynamic and static pages with Dart and shelf?
问题描述
使用 shelf_static
通过Dart提供静态网页没有问题:
< pre class =lang-dart prettyprint-override>
var staticHandler = createStaticHandler(staticPath,defaultDocument:'home.html');
io.serve(staticHandler,'localhost',port).then((server){
print('Serving at http:// $ {server.address.host}:$ {server.port }');
});
,我可以使用 shelf_route
网页:
路由器路由= new Router()
..get / item / {itemid}',handler.doItem);
var handler = const shelf.Pipeline()
.addHandler(routes.handler);
io.serve(handler,'localhost',port).then((server){
print('Serving at http:// $ {server.address.host}:$ {server.port}');
});
但是我在为动态版本添加静态处理程序时遇到了困难。
我试过的东西包括:
路由器路由= new Router b $ b ..get('/ item / {itemid}',handler.doItem)
..get('/',staticHandler);
或...
..get('/.*',staticHandler);
或...
..get('/ {any}',staticHandler);
所有这些都给我指定的默认值 home.html
page如果我请求 http:// localhost:8080 /
但明确要求一个现有的页 http:// localhost:8080 / home .html
给我找不到。
我应该不会试图用 shelf_static
?如果没有,什么是正确的方法?
谢谢!
您可以使用 Cascade
。它创建一个处理程序链,如果前一个响应给出404或405响应,则移动到下一个处理程序链。
var staticHandler = createStaticHandler(staticPath,defaultDocument:'home.html');
var routes = new Router()
..get('/ item / {itemid}',handleItem);
var handler = new Cascade()
.add(staticHandler)
.add(routes.hander)
.handler;
io.serve(handler,'localhost',port).then((server){
print('Serving at http:// $ {server.address.host}:$ {server.port }');
});
Using shelf_static
to serve static web pages through Dart is no problem:
var staticHandler = createStaticHandler(staticPath, defaultDocument:'home.html');
io.serve(staticHandler, 'localhost', port).then((server) {
print('Serving at http://${server.address.host}:${server.port}');
});
and I can use shelf_route
fine for dynamic web pages:
Router routes = new Router()
..get('/item/{itemid}', handler.doItem);
var handler = const shelf.Pipeline()
.addHandler(routes.handler);
io.serve(handler, 'localhost', port).then((server) {
print('Serving at http://${server.address.host}:${server.port}');
});
But I'm struggling with adding a static handler to the dynamic version. Things I've tried include:
Router routes = new Router()
..get('/item/{itemid}', handler.doItem)
..get('/', staticHandler);
or ...
..get('/.*', staticHandler);
or ...
..get('/{any}', staticHandler);
All of which give me the specified default home.html
page if I request http://localhost:8080/
but explicitly asking for an existing page http://localhost:8080/home.html
gives me Not Found.
Should I not even be trying to do this with shelf_static
? If not, what would be the correct approach?
Thanks!
You can use Cascade
. It creates a chain of handlers, moving to the next one if the previous one gives a 404 or 405 response.
var staticHandler = createStaticHandler(staticPath, defaultDocument:'home.html');
var routes = new Router()
..get('/item/{itemid}', handleItem);
var handler = new Cascade()
.add(staticHandler)
.add(routes.hander)
.handler;
io.serve(handler, 'localhost', port).then((server) {
print('Serving at http://${server.address.host}:${server.port}');
});
这篇关于如何使用Dart和shelf来提供动态和静态页面?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!