Scorpiion / vane

Server-side framework for Dart/Dartlang with a built-in middleware system.
BSD 3-Clause "New" or "Revised" License
59 stars 11 forks source link

Combining different methods in sub routes results in stack trace #6

Closed andreasolund closed 10 years ago

andreasolund commented 10 years ago

The issue occurs when you combine different request methods in your sub routes (GET, POST, PUT etc.).

Working:

import 'dart:async';
import 'package:vane/vane.dart';

class TestClass extends Vane {

  @Route("/test/")
  Future main() => close("OK");

  @Route("/test/state", method: GET)
  Future state() => close("OK");

  @Route("/test/wake", method: POST)
  Future wake() => close("OK");
}

void main() => serve();

Failing:

import 'dart:async';
import 'package:vane/vane.dart';

@Route("/test")
class TestClass extends Vane {

  @Route("/")
  Future main() => close("OK");

  @Route("/state", method: GET)
  Future state() => close("OK");

  @Route("/wake", method: POST)
  Future wake() => close("OK");
}

void main() => serve();

Stack trace:

2014-07-03 15:34:46.465 WARNING: The null object does not have a method 'contains'.

NoSuchMethodError: method not found: 'contains'
Receiver: null
Arguments: ["GET"]
2014-07-03 15:34:46.465 WARNING: 

2014-07-03 15:34:46.466 WARNING: #0      Object.noSuchMethod (dart:core-patch/object_patch.dart:45)
#1      Router.matchRequest (package:vane/src/router.dart:36:42)
#2      serve.<anonymous closure>.<anonymous closure>.<anonymous closure> (package:vane/src/serve.dart:34:36)
#3      _rootRunUnary (dart:async/zone.dart:730)
#4      _ZoneDelegate.runUnary (dart:async/zone.dart:462)
#5      _CustomizedZone.runUnary (dart:async/zone.dart:667)
#6      _BaseZone.runUnaryGuarded (dart:async/zone.dart:582)
#7      _BufferingStreamSubscription._sendData (dart:async/stream_impl.dart:333)
#8      _BufferingStreamSubscription._add (dart:async/stream_impl.dart:263)
#9      _StreamController&&_SyncStreamControllerDispatch._sendData (dart:async/stream_controller.dart:569)
#10     _StreamController._add (dart:async/stream_controller.dart:449)
#11     _StreamController.add (dart:async/stream_controller.dart:406)
#12     _HttpServer._handleRequest.<anonymous closure> (dart:io/http_impl.dart:2248)
#13     _rootRun (dart:async/zone.dart:719)
#14     _ZoneDelegate.run (dart:async/zone.dart:453)
#15     _CustomizedZone.run (dart:async/zone.dart:663)
#16     _BaseZone.runGuarded (dart:async/zone.dart:574)
#17     _BaseZone.bindCallback.<anonymous closure> (dart:async/zone.dart:599)
#18     _rootRun (dart:async/zone.dart:723)
#19     _ZoneDelegate.run (dart:async/zone.dart:453)
#20     _CustomizedZone.run (dart:async/zone.dart:663)
#21     _BaseZone.runGuarded (dart:async/zone.dart:574)
#22     _BaseZone.bindCallback.<anonymous closure> (dart:async/zone.dart:599)
#23     _createTimer.<anonymous closure> (dart:async-patch/timer_patch.dart:11)
#24     _handleTimeout (dart:io/timer_impl.dart:292)
#25     _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:124)
Scorpiion commented 10 years ago

Fix in this commit: https://github.com/DartVoid/Vane/commit/cd31bfa009ed4bd83fa09e3bf5bab6e1221264ca

andreasolund commented 10 years ago

:+1: