且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

用Dart搭建HTTP服务器(3)

更新时间:2022-09-16 21:31:00

基于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);
  });
}

运行代码,先试试直接访问
用Dart搭建HTTP服务器(3)
因为URL无法匹配,所以直接调用了非法URL的处理方法
用Dart搭建HTTP服务器(3)
接着再用合法URL访问,先是所有模式/posts
用Dart搭建HTTP服务器(3)
然后再是单一模式/post/数字
用Dart搭建HTTP服务器(3)
它们分别对应
用Dart搭建HTTP服务器(3)
这就是基于URL的访问模式了