基于URL的请求模式
为了不搞复杂,就简单演示一下
先把需要用到的route包分享出来http://pan.baidu.com/s/1hq1rxI0
import 'dart:io';
import 'package:route/server.dart';
import 'package:route/url_pattern.dart';
//所有模式,例如“/posts”
final postsUrl = new UrlPattern(r'/posts\/?');
//单一模式,例如“/post/24”
final postUrl = new UrlPattern(r'/post/(\d+)\/?');
//处理回调所有模式
servePosts(req) {
req.response.write('All blog posts');
req.response.close();
}
//处理回调单一模式
servePost(req) {
//解析URL路径或路径+片段
var postId = postUrl.parse(req.uri.path)[0];
req.response.write('Blog post $postId');
req.response.close();
}
//处理回调非法URL
serveNotFound(req) {
req.response.statusCode = HttpStatus.NOT_FOUND;
req.response.write('Not found');
req.response.close();
}
main(List<String> arguments) {
HttpServer.bind(InternetAddress.LOOPBACK_IP_V4, 8089).then((server) {
var router = new Router(server)
//匹配请求的URL与方法,调用对应的处理方法
..serve(postsUrl, method: 'GET').listen(servePosts)
..serve(postUrl, method: 'GET').listen(servePost)
//如果都无法匹配,调用对应的处理方法
..defaultStream.listen(serveNotFound);
});
}
运行代码,先试试直接访问
因为URL无法匹配,所以直接调用了非法URL的处理方法
接着再用合法URL访问,先是所有模式/posts
然后再是单一模式/post/数字
它们分别对应
这就是基于URL的访问模式了