从服务器启动dart应用程序并加载元素

时间:2016-04-03 14:13:17

标签: dart

我是dart编程的新手,我正在构建一个dart应用程序,我想从服务器端启动它。就像我输入网页的网址时加载我的主页一样。

在我的服务器端,我从dart网页的教程中获取了这段代码:

var server;

  try{
    server = await HttpServer.bind(InternetAddress.LOOPBACK_IP_V6, 4040);
  }catch(e){
    print("Couldn't bind to port 4044: $e");
    exit(-1);
  }
  await for(HttpRequest req in server){
    var file = new File('index.html');

    if(await file.exists()){
      print("Serving index.html.");
      req.response.headers.contentType = ContentType.HTML;
      try{
        await file.openRead().pipe(req.response);
      }catch(e){
        print("Couldn't read file: $e");
        exit(-1);
      }
    }else{
      print("Couldn't open index.html");
      req.response..statusCode = HttpStatus.NOT_FOUND..close();
    }
  }

但现在我的问题是关于客户端,我的元素没有加载,如css,图像等。

You can see the appearance here

我认为我需要在服务器端设置一些内容来加载它。它是什么?

1 个答案:

答案 0 :(得分:1)

使用核心dart:io方法提供文件通常不是最简单的方法。看看shelf,f.e。它是一个非常巧妙的框架,用于创建具有大量中间件等插件和扩展的服务器应用程序。

在您的情况下,您似乎只想提供静态内容。我建议您使用shelf_static。它会是这样的:

import 'package:shelf/shelf_io.dart' as io;
import 'package:shelf_static/shelf_static.dart';

void main() {
  var handler = createStaticHandler('your-web-directory/',
      defaultDocument: 'index.html');

  io.serve(handler, InternetAddress.LOOPBACK_IP_V6, 4040);
}