Browse Source

http: expose supported methods

Expose the list of supported HTTP methods as a property on the 'http'
module object.

Fixes #6422.
v0.11.8-release
Ben Noordhuis 11 years ago
parent
commit
610022851a
  1. 6
      doc/api/http.markdown
  2. 1
      lib/_http_common.js
  3. 1
      lib/http.js
  4. 7
      src/node_http_parser.cc
  5. 32
      test/simple/test-http-methods.js

6
doc/api/http.markdown

@ -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}

1
lib/_http_common.js

@ -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;

1
lib/http.js

@ -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;

7
src/node_http_parser.cc

@ -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);

32
test/simple/test-http-methods.js

@ -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());
Loading…
Cancel
Save