用Dart搭建HTTP服务器(3)

简介: <div class="markdown_views"><h2 id="基于url的请求模式">基于URL的请求模式</h2><p>为了不搞复杂,就简单演示一下 <br>先把需要用到的route包分享出来<a href="http://pan.baidu.com/s/1hq1rxI0">http://pan.baidu.com/s/1hq1rxI0</a></p>

基于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的访问模式了

目录
相关文章
|
21天前
|
搜索推荐 安全 网络安全
服务器支持HTTPS的时机和条件
【10月更文挑战第23天】服务器支持HTTPS的时机和条件
15 5
|
1月前
使用Netty实现文件传输的HTTP服务器和客户端
本文通过详细的代码示例,展示了如何使用Netty框架实现一个文件传输的HTTP服务器和客户端,包括服务端的文件处理和客户端的文件请求与接收。
39 1
使用Netty实现文件传输的HTTP服务器和客户端
|
15天前
|
存储 Oracle 关系型数据库
oracle服务器存储过程中调用http
通过配置权限、创建和调用存储过程,您可以在Oracle数据库中使用UTL_HTTP包发起HTTP请求。这使得Oracle存储过程可以与外部HTTP服务进行交互,从而实现更复杂的数据处理和集成。在实际应用中,根据具体需求调整请求类型和错误处理逻辑,以确保系统的稳定性和可靠性。
16 0
|
2月前
HAProxy的高级配置选项-配置haproxy支持https协议及服务器动态上下线
文章介绍了如何配置HAProxy以支持HTTPS协议和实现服务器的动态上下线。
141 8
HAProxy的高级配置选项-配置haproxy支持https协议及服务器动态上下线
|
2月前
|
开发者
HTTP状态码是由网页服务器返回的三位数字响应代码,用于表示请求的处理结果和状态
HTTP状态码是由网页服务器返回的三位数字响应代码,用于表示请求的处理结果和状态
32 1
|
3月前
|
缓存 数据安全/隐私保护 UED
代理服务器在HTTP请求中的应用:Ruby实例
代理服务器在HTTP请求中的应用:Ruby实例
|
3月前
|
移动开发 网络协议 编译器
实战案例3:C语言实现的HTTP服务器
实战案例3:C语言实现的HTTP服务器
181 0
|
Web App开发 新零售 前端开发
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html><head><meta http-equiv="Cont
1.尽可能地了解需求,系统层面适用开闭原则 2.模块化,低耦合,能快速响应变化,也可以避免一个子系统的问题波及整个大系统 3.
750 0
|
Web App开发 前端开发
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html><head><meta http-equiv="Cont
异步通信 对于BS(Browser-Server 浏览器)架构,很多情景下server的处理时间较长。 如果浏览器发送请求后,保持跟server的连接,等待server响应,那么一方面会对用户的体验有负面影响; 另一方面,很有可能会由于超时,提示用户服务请求失败。
769 0
|
Web App开发 前端开发 Java
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html><head><meta http-equiv="Cont
线程的状态有:new、runnable、running、waiting、timed_waiting、blocked、dead 当执行new Thread(Runnabler)后,新创建出来的线程处于new状态,这种线程不可能执行 当执行thread.start()后,线程处于runnable状态,这种情况下只要得到CPU,就可以开始执行了。
730 0