学习 Dart 1

长远的目标

Dart的初学者一边学一边记,下面是我的目前学习目标:

  • 大部分函数库熟练使用
  • Flutter 熟练使用

实现的目标

一个最基本的WebFramework功能

  • 路由
  • 文件下载

思路&想法

首先判断dart能不能实现HttpServer。经过查阅文档答案是√

 HttpServer在dart:io这个库里面

这是类的定义

abstract class HttpServer implements Stream<HttpRequest>

翻阅函数列表发现有个函数名称非常熟悉

  static Future<HttpServer> bind(address, int port,
          {int backlog: 0, bool v6Only: false, bool shared: false})

主要参数:

  • address 绑定的IP地址
  • port 绑定的IP地址

返回类型是 Future 不了解的同学可以百度之类的

暂时还不理解为什么address 为什么没有类型,或者我可以理解他既是类型又是名称?
address的参数只能为InternetAddress的常量。

  • loopbackIPv4
  • loopbackIPv6
  • anyIPv4
  • anyIPv6
Value Use case
LOOPBACK_IP_V4 or LOOPBACK_IP_V6 只能监听本地地址 如果线上服务器不推荐,推荐本地调试用
ANY_IP_V4 or ANY_IP_V6 监听任何IP地址,推荐线上使用

这里我们使用loopbackIPv4

代码实现

HttpServer.bind(InternetAddress.loopbackIPv4, port).then((HttpServer server){
    //处理代码
}).catchError((e) => print("出现错误:" + e.toString()));

这种回调方式跟 JS 的 Promise 很类似
这里绑定成功后我们就要监听

    server.listen((HttpRequest request) {
        //控制跟浏览器的通讯
    });

这里我们成功的获取到了HttpRequest对象,我们可以获取http头信息、请求参数、请求路径

//打印出来请求url
print(request.uri);
//设置http头 如果不指定为text/html 那么浏览器是没法解析html内容
request.response.headers.add("Content-Type", "text/html; charset=UTF-8"); 
//指定http的状态码
request.response.statusCode = 333;
//设置 headers 跟 statusCode都应该在response.write前 应为 write执行后会自动发送报头
request.response.write("<h1>http_server</h1>");
request.response.write("hello dart");
request.response.close();

一般来说request是来获取浏览器向服务器发送的信息,负责返回信息是response
而在Dart里面response被设计的是从request中获取。

这种写法很普通我换一种dart风格的写法
request.response
        ..headers.add("Content-Type", "text/html; charset=UTF-8")
        ..statusCode = 333
        ..write("<h1>http_server</h1>")
        ..write("hello dart")
        ..close();

完整代码

import 'dart:io';
void main() {
  var port = 4049;
  HttpServer.bind(InternetAddress.loopbackIPv4, port).then((HttpServer server) {
    server.listen((HttpRequest request) {
      request.response
        ..headers.add("Content-Type", "text/html; charset=UTF-8")
        ..statusCode = 333
        ..write("<h1>http_server</h1>")
        ..write("hello dart")
        ..close();
    });
  }).catchError((e) => print("出现错误:" + e.toString()));
}

猜你喜欢

转载自blog.csdn.net/a99361481/article/details/81319474