« index
Coverage for /Users/yunong/workspace/node-restify/lib/plugins/body_parser.js : 97%
89 lines |
87 run |
2 missing |
0 partial |
16 blocks |
14 blocks run |
2 blocks missing
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 | // Copyright 2012 Mark Cavage, Inc. All rights reserved. var assert = require('assert-plus'); var errors = require('../errors'); var bodyReader = require('./body_reader'); var jsonParser = require('./json_body_parser'); var formParser = require('./form_body_parser'); var multipartParser = require('./multipart_parser'); var fieldedTextParser = require('./fielded_text_body_parser.js'); ///--- Globals var UnsupportedMediaTypeError = errors.UnsupportedMediaTypeError; ///--- API function bodyParser(options) { assert.optionalObject(options, 'options'); options = options || {}; options.bodyReader = true; var read = bodyReader(options); var parseForm = formParser(options); var parseJson = jsonParser(options); var parseMultipart = multipartParser(options); var parseFieldedText = fieldedTextParser(options); function parseBody(req, res, next) { // Allow use of 'requestBodyOnGet' flag to allow for merging of // the request body of a GET request into req.params if (req.method === 'HEAD') { next(); return; } if (req.method === 'GET') { if (!options.requestBodyOnGet) { next(); return; } } if (req.contentLength() === 0 && !req.isChunked()) { next(); return; } var parser; var type = req.contentType(); switch (type) { case 'application/json': parser = parseJson[0]; break; case 'application/x-www-form-urlencoded': parser = parseForm[0]; break; case 'multipart/form-data': parser = parseMultipart; break; case 'text/tsv': parser = parseFieldedText; break; case 'text/tab-separated-values': parser = parseFieldedText; break; case 'text/csv': parser = parseFieldedText; break; default: break; } if (parser) { parser(req, res, next); } else if (options && options.rejectUnknown) { next(new UnsupportedMediaTypeError(type)); } else { next(); } } return ([read, parseBody]); } module.exports = bodyParser; |