]> git.cworth.org Git - obsolete/notmuch-web/blobdiff - node_modules/express/node_modules/connect/lib/middleware/bodyParser.js
Install the "express" node module via npm
[obsolete/notmuch-web] / node_modules / express / node_modules / connect / lib / middleware / bodyParser.js
diff --git a/node_modules/express/node_modules/connect/lib/middleware/bodyParser.js b/node_modules/express/node_modules/connect/lib/middleware/bodyParser.js
new file mode 100644 (file)
index 0000000..6de74db
--- /dev/null
@@ -0,0 +1,91 @@
+
+/*!
+ * Connect - bodyParser
+ * Copyright(c) 2010 Sencha Inc.
+ * Copyright(c) 2011 TJ Holowaychuk
+ * MIT Licensed
+ */
+
+/**
+ * Module dependencies.
+ */
+
+var qs = require('qs');
+
+/**
+ * Extract the mime type from the given request's
+ * _Content-Type_ header.
+ *
+ * @param  {IncomingMessage} req
+ * @return {String}
+ * @api private
+ */
+
+function mime(req) {
+  var str = req.headers['content-type'] || '';
+  return str.split(';')[0];
+}
+
+/**
+ * Parse request bodies.
+ *
+ * By default _application/json_ and _application/x-www-form-urlencoded_
+ * are supported, however you may map `connect.bodyParser.parse[contentType]`
+ * to a function of your choice to replace existing parsers, or implement
+ * one for other content-types.
+ *
+ * Examples:
+ *
+ *      connect.createServer(
+ *          connect.bodyParser()
+ *        , function(req, res) {
+ *          res.end('viewing user ' + req.body.user.name);
+ *        }
+ *      );
+ *
+ * Since both _json_ and _x-www-form-urlencoded_ are supported by
+ * default, either of the following requests would result in the response
+ * of "viewing user tj".
+ *
+ *      $ curl -d 'user[name]=tj' http://localhost/
+ *      $ curl -d '{"user":{"name":"tj"}}' -H "Content-Type: application/json" http://localhost/
+ *
+ * @return {Function}
+ * @api public
+ */
+
+exports = module.exports = function bodyParser(){
+  return function bodyParser(req, res, next) {
+    var parser = exports.parse[mime(req)];
+    if (parser && !req.body) {
+      var data = '';
+      req.setEncoding('utf8');
+      req.on('data', function(chunk) { data += chunk; });
+      req.on('end', function(){
+        req.rawBody = data;
+        try {
+          req.body = data
+            ? parser(data)
+            : {};
+        } catch (err) {
+          return next(err);
+        }
+        next();
+      });
+    } else {
+      next();
+    }
+  }
+};
+
+/**
+ * Supported decoders.
+ *
+ *  - application/x-www-form-urlencoded
+ *  - application/json
+ */
+
+exports.parse = {
+    'application/x-www-form-urlencoded': qs.parse
+  , 'application/json': JSON.parse
+};
\ No newline at end of file