1
我無法找到與此錯誤和飛鏢有關的任何內容,因此存在問題。未捕獲錯誤:狀態不佳:標頭已發送
在簡單的服務器應用程序中可能會導致此錯誤的原因。
import 'package:auctionprojectServer/auctionprojectServer.dart' as auctionprojectServer;
import 'dart:io';
import 'package:http_server/http_server.dart' show VirtualDirectory;
VirtualDirectory virDir;
main() {
initVirDir();
runServer();
}
/**
* Code for virtual directory
*/
initVirDir() {
virDir = new VirtualDirectory(r"..\auctionProject\web") // change to build\web after 2js
..allowDirectoryListing = true
..directoryHandler = directoryHandler;
}
directoryHandler(dir, request) {
var indexUri = new Uri.file(dir.path).resolve('auctionproject.html');
virDir.serveFile(new File(indexUri.toFilePath()), request);
}
/* end of virtual directory related code */
/**
* Code to handle Http Requests
*/
runServer() async {
var server = await HttpServer.bind('127.0.0.1', 8080).catchError((e) => print(e));
await for (HttpRequest request in server) {
handleAnyRequest(request);
request.response.close();
}
}
handleAnyRequest(HttpRequest request) {
switch (request.method) {
case 'GET':
handleGetRequest(request);
break;
case 'POST':
handlePostRequest(request);
break;
default: defaultRequestHandler(request);
}
}
handleGetRequest(HttpRequest req) {
print('got GET request');
virDir.serveRequest(req).catchError((e)=> print('annoying error')); // <<<
}
handlePostRequest(HttpRequest req) {
print('got POST request');
}
// place for other request types
defaultRequestHandler(HttpRequest req){
print('some unhandled request!!!\n');
}
/* end of code handling Http Requests */
註釋掉標有// <<<
錯誤消失代碼後。另一方面annoying error
從不打印,所以我不確定問題來自哪裏。
控制檯輸出如下所示。
got GET request
got GET request
Unhandled exception:
Uncaught Error: Bad state: Header already sent
Stack Trace:
#0 _HttpResponse.statusCode= (dart:io/http_impl.dart:523)
#1 VirtualDirectory.serveFile.<anonymous closure> (package:http_server/src/virtual_directory.dart:287:16)
#2 _RootZone.runUnary (dart:async/zone.dart:1155)
#3 _Future._propagateToListeners.handleError (dart:async/future_impl.dart:515)
#4 _Future._propagateToListeners (dart:async/future_impl.dart:570)
#5 _Future._completeWithValue (dart:async/future_impl.dart:358)
#6 _Future._asyncComplete.<anonymous closure> (dart:async/future_impl.dart:412)
#7 _asyncRunCallbackLoop (dart:async/schedule_microtask.dart:41)
#8 _asyncRunCallback (dart:async/schedule_microtask.dart:48)
#9 _runPendingImmediateCallback (dart:isolate-patch/isolate_patch.dart:96)
#10 _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:143)
#0 _rootHandleUncaughtError.<anonymous closure> (dart:async/zone.dart:886)
#1 _asyncRunCallbackLoop (dart:async/schedule_microtask.dart:41)
#2 _asyncRunCallback (dart:async/schedule_microtask.dart:48)
#3 _runPendingImmediateCallback (dart:isolate-patch/isolate_patch.dart:96)
#4 _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:143)
如果我理解正確,handleAnyRequest將需要返回未來,當被調用的請求處理程序完成時。我如何檢查'.serveFile()'是否完成。它沒有回報價值? – Lukasz
你對錯誤的原因肯定是正確的。爲了知道我註釋掉了'request.response.close()'部分。我希望能夠在不久的將來找到解決方案。謝謝。 – Lukasz