Mercurial > hg > nodescore
annotate node_modules/express/lib/router/layer.js @ 101:52e44ee1c791 tip master
enabled all scores in autostart script
author | Rob Canning <rc@kiben.net> |
---|---|
date | Tue, 21 Apr 2015 16:20:57 +0100 |
parents | 0c3a2942ddee |
children |
rev | line source |
---|---|
rc@73 | 1 /** |
rc@73 | 2 * Module dependencies. |
rc@73 | 3 */ |
rc@73 | 4 |
rc@73 | 5 var pathRegexp = require('path-to-regexp'); |
rc@73 | 6 var debug = require('debug')('express:router:layer'); |
rc@73 | 7 |
rc@73 | 8 /** |
rc@73 | 9 * Expose `Layer`. |
rc@73 | 10 */ |
rc@73 | 11 |
rc@73 | 12 module.exports = Layer; |
rc@73 | 13 |
rc@73 | 14 function Layer(path, options, fn) { |
rc@73 | 15 if (!(this instanceof Layer)) { |
rc@73 | 16 return new Layer(path, options, fn); |
rc@73 | 17 } |
rc@73 | 18 |
rc@73 | 19 debug('new %s', path); |
rc@73 | 20 options = options || {}; |
rc@73 | 21 this.regexp = pathRegexp(path, this.keys = [], options); |
rc@73 | 22 this.handle = fn; |
rc@73 | 23 } |
rc@73 | 24 |
rc@73 | 25 /** |
rc@73 | 26 * Check if this route matches `path`, if so |
rc@73 | 27 * populate `.params`. |
rc@73 | 28 * |
rc@73 | 29 * @param {String} path |
rc@73 | 30 * @return {Boolean} |
rc@73 | 31 * @api private |
rc@73 | 32 */ |
rc@73 | 33 |
rc@73 | 34 Layer.prototype.match = function(path){ |
rc@73 | 35 var keys = this.keys; |
rc@73 | 36 var params = this.params = {}; |
rc@73 | 37 var m = this.regexp.exec(path); |
rc@73 | 38 var n = 0; |
rc@73 | 39 var key; |
rc@73 | 40 var val; |
rc@73 | 41 |
rc@73 | 42 if (!m) return false; |
rc@73 | 43 |
rc@73 | 44 this.path = m[0]; |
rc@73 | 45 |
rc@73 | 46 for (var i = 1, len = m.length; i < len; ++i) { |
rc@73 | 47 key = keys[i - 1]; |
rc@73 | 48 |
rc@73 | 49 try { |
rc@73 | 50 val = 'string' == typeof m[i] |
rc@73 | 51 ? decodeURIComponent(m[i]) |
rc@73 | 52 : m[i]; |
rc@73 | 53 } catch(e) { |
rc@73 | 54 var err = new Error("Failed to decode param '" + m[i] + "'"); |
rc@73 | 55 err.status = 400; |
rc@73 | 56 throw err; |
rc@73 | 57 } |
rc@73 | 58 |
rc@73 | 59 if (key) { |
rc@73 | 60 params[key.name] = val; |
rc@73 | 61 } else { |
rc@73 | 62 params[n++] = val; |
rc@73 | 63 } |
rc@73 | 64 } |
rc@73 | 65 |
rc@73 | 66 return true; |
rc@73 | 67 }; |