http: expose supported methods
authorBen Noordhuis <info@bnoordhuis.nl>
Mon, 28 Oct 2013 12:35:33 +0000 (13:35 +0100)
committerBen Noordhuis <info@bnoordhuis.nl>
Mon, 28 Oct 2013 12:35:34 +0000 (13:35 +0100)
Expose the list of supported HTTP methods as a property on the 'http'
module object.

Fixes #6422.

doc/api/http.markdown
lib/_http_common.js
lib/http.js
src/node_http_parser.cc
test/simple/test-http-methods.js [new file with mode: 0644]

index ed390d3..80c3a50 100644 (file)
@@ -43,6 +43,12 @@ list like the following:
       'Host', 'mysite.com',
       'accepT', '*/*' ]
 
+## http.METHODS
+
+* {Array}
+
+A list of the HTTP methods that are supported by the parser.
+
 ## http.STATUS_CODES
 
 * {Object}
index 548f349..3bc1346 100644 (file)
@@ -33,6 +33,7 @@ exports.debug = debug;
 exports.CRLF = '\r\n';
 exports.chunkExpression = /chunk/i;
 exports.continueExpression = /100-continue/i;
+exports.methods = HTTPParser.methods;
 
 var kOnHeaders = HTTPParser.kOnHeaders | 0;
 var kOnHeadersComplete = HTTPParser.kOnHeadersComplete | 0;
index 44c3c2c..128bb0d 100644 (file)
@@ -28,6 +28,7 @@ var IncomingMessage = exports.IncomingMessage = incoming.IncomingMessage;
 
 
 var common = require('_http_common');
+exports.METHODS = util._extend([], common.methods).sort();
 exports.parsers = common.parsers;
 
 
index c63ea73..5dbd1da 100644 (file)
@@ -598,6 +598,13 @@ void InitHttpParser(Handle<Object> target,
   t->Set(FIXED_ONE_BYTE_STRING(node_isolate, "kOnMessageComplete"),
          Integer::NewFromUnsigned(kOnMessageComplete, node_isolate));
 
+  Local<Array> methods = Array::New();
+#define V(num, name, string)                                                  \
+    methods->Set(num, FIXED_ONE_BYTE_STRING(node_isolate, #string));
+  HTTP_METHOD_MAP(V)
+#undef V
+  t->Set(FIXED_ONE_BYTE_STRING(node_isolate, "methods"), methods);
+
   NODE_SET_PROTOTYPE_METHOD(t, "execute", Parser::Execute);
   NODE_SET_PROTOTYPE_METHOD(t, "finish", Parser::Finish);
   NODE_SET_PROTOTYPE_METHOD(t, "reinitialize", Parser::Reinitialize);
diff --git a/test/simple/test-http-methods.js b/test/simple/test-http-methods.js
new file mode 100644 (file)
index 0000000..eec66d2
--- /dev/null
@@ -0,0 +1,32 @@
+// Copyright Joyent, Inc. and other Node contributors.
+//
+// Permission is hereby granted, free of charge, to any person obtaining a
+// copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to permit
+// persons to whom the Software is furnished to do so, subject to the
+// following conditions:
+//
+// The above copyright notice and this permission notice shall be included
+// in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
+// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
+// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
+// USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+var common = require('../common');
+var assert = require('assert');
+var http = require('http');
+var util = require('util');
+
+assert(Array.isArray(http.METHODS));
+assert(http.METHODS.length > 0);
+assert(http.METHODS.indexOf('GET') !== -1);
+assert(http.METHODS.indexOf('HEAD') !== -1);
+assert(http.METHODS.indexOf('POST') !== -1);
+assert.deepEqual(util._extend([], http.METHODS), http.METHODS.sort());