2014-12-03 4 views
1

다트에서 "HTTP 헤더가 변경 가능하지 않습니다"라는 오류가 계속 발생합니다.다트 : HTTP 헤더를 변경할 수 없습니다.

사용자가 "패키지"폴더에서 무엇인가를 묻는다면 그것을 가져올 것입니다.

if(new RegExp("/packages/(.*)").hasMatch(request.uri.toString())){ 
    new File(request.uri.toString().substring(1)).readAsString().then((String contents){ 
     request.response.headers.contentType = new ContentType("text", "css", charset: "utf-8"); 
     request.response.write(contents); 
     request.response.close(); 
    }); 
    } 

그리고 내 전체 코드는 이것이다 : 오류가있는

내 코드 등이다

기본적으로
import "dart:io"; 

void main() { 
    HttpServer.bind(InternetAddress.LOOPBACK_IP_V4, 8000).then((HttpServer server){ 
    print("Listening on localhost on {$server.port}"); 

    server.listen((HttpRequest request){ 
     switch(request.uri.toString()){ 
     case "/": 
      request.response.headers.contentType = ContentType.HTML; 

      new File("static/taskbar.html").readAsString().then((String contents){ 
      request.response.write(contents); 
      request.response.close(); 

      new File("static/index.html").readAsString().then((String contents){ 
       request.response.write(contents); 
       request.response.close(); 
      }); 
      }); 
      break; 
     default: 
      request.response.statusCode = HttpStatus.NOT_FOUND; 
      request.response.write("404 Not Found."); 
      request.response.close(); 
      break; 
     } 

     if(new RegExp("/packages/(.*)").hasMatch(request.uri.toString())){ 
     new File(request.uri.toString().substring(1)).readAsString().then((String contents){ 
      request.response.headers.contentType = new ContentType("text", "css", charset: "utf-8"); 
      request.response.write(contents); 
      request.response.close(); 
     }); 
     } 
    }); 
    }); 
} 

답변

7

, 당신은 "HTTP 헤더는 변경할 수 없습니다"라는 에러, 응답을 작성한 후에 헤더를 수정하려고한다는 것을 의미합니다.

코드에서 요청이 /packages/(.*) 패턴과 일치하면 스위치의 default 절도 실행되어 404 응답을 생성합니다. 따라서 응답에 다시 쓰려고하면 서버에서 예외가 발생합니다.

이 문제를 해결하려면 스위치를 if else 표현식으로 바꿀 수 있습니다. 예 :

HttpServer.bind(InternetAddress.LOOPBACK_IP_V4, 8000).then((HttpServer server){ 
    print("Listening on localhost on {$server.port}"); 

    server.listen((HttpRequest request){ 
    var uri = request.uri.toString(); 
    if (uri == "/") { 

     request.response.headers.contentType = ContentType.HTML; 

     new File("static/taskbar.html").readAsString().then((String contents){ 
     request.response.write(contents); 
     request.response.close(); 

     new File("static/index.html").readAsString().then((String contents){ 
      request.response.write(contents); 
      request.response.close(); 
     }); 
     }); 

    } else if(new RegExp("/packages/(.*)").hasMatch(uri)){ 

     new File(uri.substring(1)).readAsString().then((String contents){ 
     request.response.headers.contentType = new ContentType("text", "css", charset: "utf-8"); 
     request.response.write(contents); 
     request.response.close(); 
     }); 

    } else { 

     request.response.statusCode = HttpStatus.NOT_FOUND; 
     request.response.write("404 Not Found."); 
     request.response.close(); 

    } 
    }); 
}); 
관련 문제